From f84f989951eb4b011680bf6fde33e7acc81072d2 Mon Sep 17 00:00:00 2001 From: "Zhangyao(Maggie)" Date: Mon, 16 Dec 2024 09:31:05 +0800 Subject: [PATCH 1/2] updatesendrate crash Signed-off-by: Zhangyao(Maggie) --- services/backup_sa/src/module_ipc/service.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index f0e2d9593..1eb20ed30 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1812,6 +1812,12 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); + std::shared_ptr mutexPtr = GetExtensionMutex(bundleName); + if (mutexPtr == nullptr) { + HILOGE("extension mutex ptr is nullptr"); + return BError(BError::Codes::SA_INVAL_ARG, "Extension mutex ptr is null."); + } + std::lock_guard lock(mutexPtr->callbackMutex); VerifyCaller(); IServiceReverse::Scenario scenario = session_ -> GetScenario(); if (scenario != IServiceReverse::Scenario::BACKUP) { @@ -1820,7 +1826,8 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); return BError(BError::Codes::SA_INVAL_ARG); } - auto backupConnection = session_->GetExtConnection(bundleName); + auto tempBackupConnection = session_->GetExtConnection(bundleName); + auto backupConnection = tempBackupConnection.promote(); auto proxy = backupConnection->GetBackupExtProxy(); if (!proxy) { throw BError(BError::Codes::SA_INVAL_ARG, "Extension backup Proxy is empty"); @@ -1832,10 +1839,12 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool return BError(BError::Codes::EXT_BROKEN_IPC); } result = true; + RemoveExtensionMutex(bundleName); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); return BError(BError::Codes::OK); } catch (...) { result = false; + RemoveExtensionMutex(bundleName); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); HILOGI("Unexpected exception"); return EPERM; -- Gitee From bde275c84cbd8df34123df4bebae9fb29192ecda Mon Sep 17 00:00:00 2001 From: "Zhangyao(Maggie)" Date: Wed, 18 Dec 2024 09:32:20 +0800 Subject: [PATCH 2/2] updatesendrate crash Signed-off-by: Zhangyao(Maggie) --- services/backup_sa/src/module_ipc/service.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 1eb20ed30..b9341ba8a 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1814,7 +1814,7 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); std::shared_ptr mutexPtr = GetExtensionMutex(bundleName); if (mutexPtr == nullptr) { - HILOGE("extension mutex ptr is nullptr"); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); return BError(BError::Codes::SA_INVAL_ARG, "Extension mutex ptr is null."); } std::lock_guard lock(mutexPtr->callbackMutex); @@ -1826,8 +1826,12 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); return BError(BError::Codes::SA_INVAL_ARG); } - auto tempBackupConnection = session_->GetExtConnection(bundleName); - auto backupConnection = tempBackupConnection.promote(); + auto backupConnection = session_->GetExtConnection(bundleName); + if (backupConnection == nullptr) { + HILOGE("backUpConnection is null. bundleName: %{public}s", bundleName.c_str()); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return BError(BError::Codes::SA_INVAL_ARG); + } auto proxy = backupConnection->GetBackupExtProxy(); if (!proxy) { throw BError(BError::Codes::SA_INVAL_ARG, "Extension backup Proxy is empty"); @@ -1839,16 +1843,15 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool return BError(BError::Codes::EXT_BROKEN_IPC); } result = true; - RemoveExtensionMutex(bundleName); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); - return BError(BError::Codes::OK); } catch (...) { result = false; - RemoveExtensionMutex(bundleName); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); - HILOGI("Unexpected exception"); + HILOGE("Unexpected exception"); return EPERM; } + RemoveExtensionMutex(bundleName); + return BError(BError::Codes::OK); } AAFwk::Want Service::CreateConnectWant (BundleName &bundleName) -- Gitee