diff --git a/services/audiomanager/managersink/include/daudio_sink_manager.h b/services/audiomanager/managersink/include/daudio_sink_manager.h index a78776c261ad6d4ee45b6c34abc738170b136bb2..e84c129135f7bd0576ecb2bc1defd882ccd63626 100644 --- a/services/audiomanager/managersink/include/daudio_sink_manager.h +++ b/services/audiomanager/managersink/include/daudio_sink_manager.h @@ -80,6 +80,7 @@ private: std::mutex devMapMutex_; std::unordered_map> audioDevMap_; std::mutex remoteSvrMutex_; + std::mutex ipcCallbackMutex_; std::map> sourceServiceMap_; std::thread devClearThread_; std::string localNetworkId_; diff --git a/services/audiomanager/managersink/src/daudio_sink_manager.cpp b/services/audiomanager/managersink/src/daudio_sink_manager.cpp index f1c92d9e720052a055592fd3972dca78ca9ca51e..7ce29f149300027597a6fb9072e08ed43dab75fa 100644 --- a/services/audiomanager/managersink/src/daudio_sink_manager.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_manager.cpp @@ -63,8 +63,11 @@ DAudioSinkManager::~DAudioSinkManager() int32_t DAudioSinkManager::Init(const sptr &sinkCallback) { DHLOGI("Init audio sink manager."); - initCallback_ = std::make_shared(); - ipcSinkCallback_ = sinkCallback; + { + std::lock_guard lock(ipcCallbackMutex_); + initCallback_ = std::make_shared(); + ipcSinkCallback_ = sinkCallback; + } CHECK_AND_RETURN_RET_LOG(GetLocalDeviceNetworkId(localNetworkId_) != DH_SUCCESS, ERR_DH_AUDIO_FAILED, "%{public}s", "Get local network id failed."); CHECK_AND_RETURN_RET_LOG(LoadAVReceiverEngineProvider() != DH_SUCCESS, diff --git a/services/audiomanager/managersource/include/daudio_source_manager.h b/services/audiomanager/managersource/include/daudio_source_manager.h index 2c86a6b121d1635e74d56c121059173ba604c205..c0cf00bfe68d0bf3933889c325cdef89701924bf 100644 --- a/services/audiomanager/managersource/include/daudio_source_manager.h +++ b/services/audiomanager/managersource/include/daudio_source_manager.h @@ -84,6 +84,7 @@ private: std::mutex devMapMtx_; std::map audioDevMap_; std::mutex remoteSvrMutex_; + std::mutex ipcCallbackMutex_; std::map> sinkServiceMap_; sptr ipcCallback_ = nullptr; std::shared_ptr daudioMgrCallback_ = nullptr; diff --git a/services/audiomanager/managersource/src/daudio_source_manager.cpp b/services/audiomanager/managersource/src/daudio_source_manager.cpp index 692adcf6faa02eb1b74759d95bbc2c2c0bad3e4b..d0932a40c67f0ae668ef42a5b9863452145f5db7 100644 --- a/services/audiomanager/managersource/src/daudio_source_manager.cpp +++ b/services/audiomanager/managersource/src/daudio_source_manager.cpp @@ -79,9 +79,11 @@ int32_t DAudioSourceManager::Init(const sptr &callback) DHLOGE("Get local network id failed."); return ERR_DH_AUDIO_FAILED; } - - ipcCallback_ = callback; - daudioMgrCallback_ = std::make_shared(); + { + std::lock_guard lock(ipcCallbackMutex_); + ipcCallback_ = callback; + daudioMgrCallback_ = std::make_shared(); + } int32_t ret = LoadAVSenderEngineProvider(); if (ret != DH_SUCCESS) { DHLOGE("load av transport sender engine provider failed");