From 679ead167513d0e762d062078468032b92087ba2 Mon Sep 17 00:00:00 2001 From: houpengtao Date: Sat, 19 Nov 2022 14:45:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=93=9D=E7=89=99=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=E4=B8=8B=EF=BC=8C=E4=B8=89=E8=AE=BE=E5=A4=87=E7=BB=84?= =?UTF-8?q?=E7=BD=91=EF=BC=8C=E6=9C=89=E4=B8=A4=E4=B8=AA=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E9=97=B4=E6=97=A0=E6=B3=95=E5=90=8C=E6=AD=A5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: houpengtao --- .../src/softbus_adapter_standard.cpp | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp index 1384627bd..475da46ce 100644 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp @@ -214,7 +214,6 @@ Status SoftBusAdapter::OpenConnect(const PipeInfo &pipeInfo, const DeviceId &dev ZLOGI("waited for notification, state:%{public}d connId:%{public}d", state, id); if (state != SOFTBUS_OK) { ZLOGE("OpenSession callback result error"); - CloseSession(id); return Status::NETWORK_ERROR; } @@ -237,29 +236,37 @@ void SoftBusAdapter::InitSessionAttribute(const std::vector &linkTypes Status SoftBusAdapter::GetConnect(const PipeInfo &pipeInfo, const DeviceId &deviceId, int32_t dataSize, int32_t &connId) { - connects_.Compute(pipeInfo.pipeId + deviceId.deviceId, - [&pipeInfo, &deviceId, &dataSize, &connId, this](const auto &key, ConnectInfo &value) { - std::vector linkTypes; - bool isReconnect = CommunicationStrategy::GetInstance().GetStrategy(deviceId.deviceId, dataSize, linkTypes); - if ((value.connId < 0) || (isReconnect && !value.hasReconnect)) { - if (value.connId > 0) { - CloseSession(value.connId); + std::vector linkTypes; + bool isReconnect = CommunicationStrategy::GetInstance().GetStrategy(deviceId.deviceId, dataSize, linkTypes); + Status status = Status::ERROR; + auto result = connects_.ComputeIfPresent(pipeInfo.pipeId + deviceId.deviceId, + [&isReconnect, &status, &connId](const std::string& key, ConnectInfo & value) { + connId = value.connId; + value.idleCount = 0; + if (value.hasReconnect || !isReconnect) { + status = Status::SUCCESS; } - Status status = this->OpenConnect(pipeInfo, deviceId, linkTypes, connId); - if (status == Status::SUCCESS) { - value = {connId, 0, isReconnect}; - return true; - } - connId = -1; - return false; - } - - connId = value.connId; - value.idleCount = 0; - return true; + return true; }); - return connId > 0 ? Status::SUCCESS : Status::ERROR; + if (status == Status::SUCCESS) { + return Status::SUCCESS; + } + + if (result) { + CloseSession(connId); + connId = INVALID_CONNECT_ID; + } + + status = OpenConnect(pipeInfo, deviceId, linkTypes, connId); + if (status == Status::SUCCESS) { + ConnectInfo conn = {connId, 0, isReconnect}; + connects_.InsertOrAssign(pipeInfo.pipeId + deviceId.deviceId, conn); + return Status::SUCCESS; + } + + connId = INVALID_CONNECT_ID; + return status; } std::shared_ptr SoftBusAdapter::GetMutex(const PipeInfo &pipeInfo, const DeviceId &deviceId) -- Gitee