diff --git a/interfaces/inner_kits/native_cpp/audio_source/include/daudio_ipc_callback.h b/interfaces/inner_kits/native_cpp/audio_source/include/daudio_ipc_callback.h index 1d316a4202af1b24505bf710129b962b56541682..077c24c83d63e0809c4c008af0efa34c081609ef 100644 --- a/interfaces/inner_kits/native_cpp/audio_source/include/daudio_ipc_callback.h +++ b/interfaces/inner_kits/native_cpp/audio_source/include/daudio_ipc_callback.h @@ -17,6 +17,7 @@ #define OHOS_DAUDIO_IPC_CALLBACK_H #include +#include #include "daudio_ipc_callback_stub.h" #include "idistributed_hardware_source.h" @@ -39,7 +40,9 @@ public: void PopUnregisterCallback(const std::string &reqId); private: + std::mutex registerMapMtx_; std::map> registerCallbackMap_; + std::mutex unregisterMapMtx_; std::map> unregisterCallbackMap_; }; } // DistributedHardware diff --git a/interfaces/inner_kits/native_cpp/audio_source/src/daudio_ipc_callback.cpp b/interfaces/inner_kits/native_cpp/audio_source/src/daudio_ipc_callback.cpp index 1e97d15b053f81228137236f7e7d6b1a79267e27..8dd18475f0e8ca15a70303fa35b0fe8890a3d303 100644 --- a/interfaces/inner_kits/native_cpp/audio_source/src/daudio_ipc_callback.cpp +++ b/interfaces/inner_kits/native_cpp/audio_source/src/daudio_ipc_callback.cpp @@ -35,6 +35,7 @@ int32_t DAudioIpcCallback::OnNotifyRegResult(const std::string &devId, const std reqId.length() > DAUDIO_MAX_DEVICE_ID_LEN) { return ERR_DH_AUDIO_SA_DEVID_ILLEGAL; } + std::lock_guard registerLck(registerMapMtx_); auto iter = registerCallbackMap_.find(reqId); if (iter != registerCallbackMap_.end()) { iter->second->OnRegisterResult(devId, dhId, status, resultData); @@ -55,6 +56,7 @@ int32_t DAudioIpcCallback::OnNotifyUnregResult(const std::string &devId, const s reqId.length() > DAUDIO_MAX_DEVICE_ID_LEN) { return ERR_DH_AUDIO_SA_DEVID_ILLEGAL; } + std::lock_guard registerLck(unregisterMapMtx_); auto iter = unregisterCallbackMap_.find(reqId); if (iter != unregisterCallbackMap_.end()) { iter->second->OnUnregisterResult(devId, dhId, status, resultData); @@ -68,12 +70,14 @@ void DAudioIpcCallback::PushRegisterCallback(const std::string &reqId, const std::shared_ptr &callback) { DHLOGD("Push register callback, reqId: %s", reqId.c_str()); + std::lock_guard registerLck(registerMapMtx_); registerCallbackMap_.emplace(reqId, callback); } void DAudioIpcCallback::PopRegisterCallback(const std::string &reqId) { DHLOGD("Pop register callback, reqId: %s", reqId.c_str()); + std::lock_guard registerLck(registerMapMtx_); registerCallbackMap_.erase(reqId); } @@ -81,12 +85,14 @@ void DAudioIpcCallback::PushUnregisterCallback(const std::string &reqId, const std::shared_ptr &callback) { DHLOGD("Push unregister callback, reqId: %s", reqId.c_str()); + std::lock_guard registerLck(unregisterMapMtx_); unregisterCallbackMap_.emplace(reqId, callback); } void DAudioIpcCallback::PopUnregisterCallback(const std::string &reqId) { DHLOGD("Pop unregister callback, reqId: %s", reqId.c_str()); + std::lock_guard registerLck(unregisterMapMtx_); unregisterCallbackMap_.erase(reqId); } } // DistributedHardware