From 80e59b9769ff39e2a90261432024c5989b336221 Mon Sep 17 00:00:00 2001 From: ruiyangsun Date: Sat, 6 Sep 2025 14:37:08 +0800 Subject: [PATCH 1/2] lock object Signed-off-by: ruiyangsun --- .../audio_service/server/include/audio_process_in_server.h | 1 + .../audio_service/server/src/audio_process_in_server.cpp | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/services/audio_service/server/include/audio_process_in_server.h b/services/audio_service/server/include/audio_process_in_server.h index eb5bc69881..0c873f340d 100644 --- a/services/audio_service/server/include/audio_process_in_server.h +++ b/services/audio_service/server/include/audio_process_in_server.h @@ -163,6 +163,7 @@ private: std::mutex innerCapStateMutex_; std::unordered_map innerCapStates_; ProcessReleaseCallback *releaseCallback_ = nullptr; + std::mutex objectLock_; sptr object_ = nullptr; sptr deathRecipient_ = nullptr; diff --git a/services/audio_service/server/src/audio_process_in_server.cpp b/services/audio_service/server/src/audio_process_in_server.cpp index e265cc3beb..91099e577b 100644 --- a/services/audio_service/server/src/audio_process_in_server.cpp +++ b/services/audio_service/server/src/audio_process_in_server.cpp @@ -500,7 +500,10 @@ int32_t AudioProcessInServer::RegisterProcessCb(const sptr& objec deathRecipient_ = new ProcessDeathRecipient(this, releaseCallback_); bool result = object->AddDeathRecipient(deathRecipient_); CHECK_AND_RETURN_RET_LOG(result, ERR_OPERATION_FAILED, "AddDeathRecipient failed."); - object_= object; + { + std::lock_guard lock(objectLock_); + object_= object; + } return SUCCESS; } -- Gitee From 3351e5424753eb67eaf1beba036929c753420be6 Mon Sep 17 00:00:00 2001 From: ruiyangsun Date: Sat, 6 Sep 2025 15:04:44 +0800 Subject: [PATCH 2/2] fix bug Signed-off-by: ruiyangsun --- .../audio_service/server/include/audio_process_in_server.h | 2 +- .../audio_service/server/src/audio_process_in_server.cpp | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/services/audio_service/server/include/audio_process_in_server.h b/services/audio_service/server/include/audio_process_in_server.h index 0c873f340d..50bb9774c5 100644 --- a/services/audio_service/server/include/audio_process_in_server.h +++ b/services/audio_service/server/include/audio_process_in_server.h @@ -163,7 +163,7 @@ private: std::mutex innerCapStateMutex_; std::unordered_map innerCapStates_; ProcessReleaseCallback *releaseCallback_ = nullptr; - std::mutex objectLock_; + std::mutex registerProcessCbLock_; sptr object_ = nullptr; sptr deathRecipient_ = nullptr; diff --git a/services/audio_service/server/src/audio_process_in_server.cpp b/services/audio_service/server/src/audio_process_in_server.cpp index 91099e577b..22604740a2 100644 --- a/services/audio_service/server/src/audio_process_in_server.cpp +++ b/services/audio_service/server/src/audio_process_in_server.cpp @@ -495,15 +495,13 @@ void ProcessDeathRecipient::OnRemoteDied(const wptr &remote) int32_t AudioProcessInServer::RegisterProcessCb(const sptr& object) { + std::lock_guard lock(registerProcessCbLock_); sptr processCb = iface_cast(object); CHECK_AND_RETURN_RET_LOG(processCb != nullptr, ERR_INVALID_PARAM, "RegisterProcessCb obj cast failed"); deathRecipient_ = new ProcessDeathRecipient(this, releaseCallback_); bool result = object->AddDeathRecipient(deathRecipient_); CHECK_AND_RETURN_RET_LOG(result, ERR_OPERATION_FAILED, "AddDeathRecipient failed."); - { - std::lock_guard lock(objectLock_); - object_= object; - } + object_= object; return SUCCESS; } -- Gitee