diff --git a/frameworks/native/audiopolicy/include/audio_policy_manager.h b/frameworks/native/audiopolicy/include/audio_policy_manager.h index 4f419a3fa49fae5336e66d0eac56eab796db5422..cafad9fd3d9d532db696c2610f2443f5e9ca4918 100644 --- a/frameworks/native/audiopolicy/include/audio_policy_manager.h +++ b/frameworks/native/audiopolicy/include/audio_policy_manager.h @@ -191,6 +191,7 @@ private: std::mutex volumeCallbackMutex_; std::mutex stateChangelistenerStubMutex_; std::mutex clientTrackerStubMutex_; + std::mutex ringerModelistenerStubMutex_; sptr volumeKeyEventListenerStub_ = nullptr; sptr ringerModelistenerStub_ = nullptr; sptr rendererStateChangelistenerStub_ = nullptr; diff --git a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h index 0c0856fbe249cbee9c84d772ecaeb62fac669db9..ead8e49fc8a97b70fdf1636acd5eacc8cb4d7fbb 100644 --- a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h +++ b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h @@ -293,6 +293,7 @@ private: std::shared_ptr audioInterruptCallback_ = nullptr; std::shared_ptr ringerModeCallback_ = nullptr; std::vector> groupManagerMap_; + std::mutex ringerModeCallbackMutex_; }; } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_policy/client/src/audio_policy_manager.cpp b/services/audio_policy/client/src/audio_policy_manager.cpp index 26845ac1243b5a390be8cd2e07be41c8b68fc8d4..1682d467414e0c93be5c3b80c900f20fe3e24a49 100644 --- a/services/audio_policy/client/src/audio_policy_manager.cpp +++ b/services/audio_policy/client/src/audio_policy_manager.cpp @@ -368,7 +368,7 @@ int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId, AUDIO_ERR_LOG("SetRingerModeCallback: callback is nullptr"); return ERR_INVALID_PARAM; } - + std::lock_guard lockSet(ringerModelistenerStubMutex_); ringerModelistenerStub_ = new(std::nothrow) AudioRingerModeUpdateListenerStub(); if (ringerModelistenerStub_ == nullptr) { AUDIO_ERR_LOG("SetRingerModeCallback: object null"); diff --git a/services/audio_policy/server/src/audio_client_tracker_callback_proxy.cpp b/services/audio_policy/server/src/audio_client_tracker_callback_proxy.cpp index d44fb01ae6f77ebc837bfb96ea1cf0e4b6b5137b..902ad55fff40f6f3458ec939da0d95130ecfcb45 100644 --- a/services/audio_policy/server/src/audio_client_tracker_callback_proxy.cpp +++ b/services/audio_policy/server/src/audio_client_tracker_callback_proxy.cpp @@ -62,7 +62,7 @@ void AudioClientTrackerCallbackProxy::SetLowPowerVolumeImpl(float volume) { MessageParcel data; MessageParcel reply; - MessageOption option; + MessageOption option(MessageOption::TF_ASYNC); if (!data.WriteInterfaceToken(GetDescriptor())) { AUDIO_ERR_LOG("AudioClientTrackerCallbackProxy: WriteInterfaceToken failed"); return; diff --git a/services/audio_policy/server/src/audio_policy_server.cpp b/services/audio_policy/server/src/audio_policy_server.cpp index 1036a001ccf52064667883622237b5e8a1c5628f..69f2ff91d90d0e37f6b09f328a4178899d828a53 100644 --- a/services/audio_policy/server/src/audio_policy_server.cpp +++ b/services/audio_policy/server/src/audio_policy_server.cpp @@ -462,6 +462,7 @@ std::vector AudioPolicyServer::GetSupportedTones() int32_t AudioPolicyServer::SetMicrophoneMuteCommon(bool isMute, API_VERSION api_v) { + std::lock_guard lock(micStateChangeMutex_); AUDIO_INFO_LOG("Entered %{public}s", __func__); bool isMicrophoneMute = IsMicrophoneMute(api_v); int32_t ret = mPolicyService.SetMicrophoneMute(isMute); diff --git a/services/audio_policy/server/src/audio_ringermode_update_listener_proxy.cpp b/services/audio_policy/server/src/audio_ringermode_update_listener_proxy.cpp index d95e34b55c260babbbb355c8d8382b32b437f66b..906f8f6441e7f9bb9024d19ae0f0bc26f1d0e1e4 100644 --- a/services/audio_policy/server/src/audio_ringermode_update_listener_proxy.cpp +++ b/services/audio_policy/server/src/audio_ringermode_update_listener_proxy.cpp @@ -34,7 +34,7 @@ void AudioRingerModeUpdateListenerProxy::OnRingerModeUpdated(const AudioRingerMo { MessageParcel data; MessageParcel reply; - MessageOption option; + MessageOption option(MessageOption::TF_ASYNC); if (!data.WriteInterfaceToken(GetDescriptor())) { AUDIO_ERR_LOG("AudioRingerModeListenerCallback: WriteInterfaceToken failed"); diff --git a/services/audio_policy/server/src/audio_routing_manager_listener_proxy.cpp b/services/audio_policy/server/src/audio_routing_manager_listener_proxy.cpp index c07a450b65bae3244c16c61f887a142321c10b93..c1e1afbb8f4ed2341b19c0a16165bc6f2350745c 100644 --- a/services/audio_policy/server/src/audio_routing_manager_listener_proxy.cpp +++ b/services/audio_policy/server/src/audio_routing_manager_listener_proxy.cpp @@ -34,7 +34,7 @@ void AudioRoutingManagerListenerProxy::OnMicStateUpdated(const MicStateChangeEve { MessageParcel data; MessageParcel reply; - MessageOption option; + MessageOption option(MessageOption::TF_ASYNC); if (!data.WriteInterfaceToken(GetDescriptor())) { AUDIO_ERR_LOG("AudioPolicyManagerListenerProxy: WriteInterfaceToken failed"); return; diff --git a/services/audio_policy/server/src/audio_stream_collector.cpp b/services/audio_policy/server/src/audio_stream_collector.cpp index 4cf4950afd465f807e2f45a1df3892ed82dedcbb..dba370449fafd1ccab9cae0778526ca74759a3d9 100644 --- a/services/audio_policy/server/src/audio_stream_collector.cpp +++ b/services/audio_policy/server/src/audio_stream_collector.cpp @@ -526,6 +526,7 @@ int32_t AudioStreamCollector::UpdateStreamState(int32_t clientUid, int32_t AudioStreamCollector::SetLowPowerVolume(int32_t streamId, float volume) { + std::lock_guard lock(streamsInfoMutex_); CHECK_AND_RETURN_RET_LOG(!(clientTracker_.count(streamId) == 0), ERR_INVALID_PARAM, "AudioStreamCollector:SetLowPowerVolume streamId invalid."); std::shared_ptr callback = clientTracker_[streamId]; @@ -537,6 +538,7 @@ int32_t AudioStreamCollector::SetLowPowerVolume(int32_t streamId, float volume) float AudioStreamCollector::GetLowPowerVolume(int32_t streamId) { + std::lock_guard lock(streamsInfoMutex_); CHECK_AND_RETURN_RET_LOG(!(clientTracker_.count(streamId) == 0), ERR_INVALID_PARAM, "AudioStreamCollector:GetLowPowerVolume streamId invalid."); float volume; @@ -549,6 +551,7 @@ float AudioStreamCollector::GetLowPowerVolume(int32_t streamId) float AudioStreamCollector::GetSingleStreamVolume(int32_t streamId) { + std::lock_guard lock(streamsInfoMutex_); CHECK_AND_RETURN_RET_LOG(!(clientTracker_.count(streamId) == 0), ERR_INVALID_PARAM, "AudioStreamCollector:GetSingleStreamVolume streamId invalid."); float volume; diff --git a/services/audio_service/client/include/audio_service_client.h b/services/audio_service/client/include/audio_service_client.h index 0d0dd4e495580c9157d7d0654b36bf886759aab2..94cdec1c1b10155a26b2b551b71303d45be438f9 100644 --- a/services/audio_service/client/include/audio_service_client.h +++ b/services/audio_service/client/include/audio_service_client.h @@ -529,6 +529,7 @@ private: std::mutex rendererMarkReachedMutex_; std::mutex rendererPeriodReachedMutex_; std::mutex runnerMutex_; + std::mutex writeCallbackMutex_; bool runnerReleased_ = false; AudioCache acache; diff --git a/services/audio_service/client/src/audio_service_client.cpp b/services/audio_service/client/src/audio_service_client.cpp index 3162275954e9f256e5c8c70eb3325296edcd5926..81a914fb8b7418d9a46487fa1ce9a2b82139f110 100644 --- a/services/audio_service/client/src/audio_service_client.cpp +++ b/services/audio_service/client/src/audio_service_client.cpp @@ -2564,6 +2564,7 @@ void AudioServiceClient::HandleUnsetCapturerPeriodReachedEvent() int32_t AudioServiceClient::SetRendererWriteCallback(const std::shared_ptr &callback) { + std::lock_guard lockSet(writeCallbackMutex_); if (!callback) { AUDIO_ERR_LOG("AudioServiceClient::SetRendererWriteCallback callback is nullptr"); return ERR_INVALID_PARAM; @@ -2584,6 +2585,7 @@ void AudioServiceClient::SendWriteBufferRequestEvent() void AudioServiceClient::HandleWriteRequestEvent() { + std::lock_guard lockSet(writeCallbackMutex_); // do callback to application if (writeCallback_) { size_t requestSize; diff --git a/services/audio_service/client/src/audio_system_manager.cpp b/services/audio_service/client/src/audio_system_manager.cpp index cccb4dc9e9bb2ff1af710c48f7d7bd1ee6b1302d..1912c5565619b22360bf59e98fc75c7cdbdbe0f0 100644 --- a/services/audio_service/client/src/audio_system_manager.cpp +++ b/services/audio_service/client/src/audio_system_manager.cpp @@ -166,6 +166,7 @@ void AudioSystemManager::AudioServerDied(pid_t pid) int32_t AudioSystemManager::SetRingerMode(AudioRingerMode ringMode) { + std::lock_guard lockSet(ringerModeCallbackMutex_); ringModeBackup_ = ringMode; if (ringerModeCallback_ != nullptr) { ringerModeCallback_->OnRingerModeUpdated(ringModeBackup_); @@ -501,6 +502,7 @@ int32_t AudioSystemManager::UnsetDeviceChangeCallback() int32_t AudioSystemManager::SetRingerModeCallback(const int32_t clientId, const std::shared_ptr &callback) { + std::lock_guard lockSet(ringerModeCallbackMutex_); if (callback == nullptr) { AUDIO_ERR_LOG("AudioSystemManager: callback is nullptr"); return ERR_INVALID_PARAM; diff --git a/services/audio_service/server/include/audio_server.h b/services/audio_service/server/include/audio_server.h index dfe5187fec2d307f21178a095460368e0873c75f..274bca4aa5b50d805a030c444a100fd07a0f3d58 100644 --- a/services/audio_service/server/include/audio_server.h +++ b/services/audio_service/server/include/audio_server.h @@ -83,6 +83,7 @@ private: pthread_t m_paDaemonThread; AudioScene audioScene_ = AUDIO_SCENE_DEFAULT; std::shared_ptr callback_; + std::mutex setParameterCallbackMutex_; }; } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_service/server/src/audio_manager_listener_proxy.cpp b/services/audio_service/server/src/audio_manager_listener_proxy.cpp index a836f55ca751345ae8717436279603af3a0a54ae..aaaebbf12423063b47958a31ebb773ac6e681479 100755 --- a/services/audio_service/server/src/audio_manager_listener_proxy.cpp +++ b/services/audio_service/server/src/audio_manager_listener_proxy.cpp @@ -46,7 +46,7 @@ void AudioManagerListenerProxy::OnAudioParameterChange(const std::string network MessageParcel data; MessageParcel reply; - MessageOption option; + MessageOption option(MessageOption::TF_ASYNC); if (!data.WriteInterfaceToken(GetDescriptor())) { AUDIO_ERR_LOG("AudioPolicyManagerListenerProxy: WriteInterfaceToken failed"); return; diff --git a/services/audio_service/server/src/audio_server.cpp b/services/audio_service/server/src/audio_server.cpp index 01d7b62f797f1b9ff71c6f10d5d4cbd037ce942d..788c4f108697ece6153c9b2ec349182f784cf367 100644 --- a/services/audio_service/server/src/audio_server.cpp +++ b/services/audio_service/server/src/audio_server.cpp @@ -429,6 +429,7 @@ int32_t AudioServer::CheckRemoteDeviceState(std::string networkId, DeviceRole de void AudioServer::OnAudioParameterChange(std::string netWorkId, const AudioParamKey key, const std::string& condition, const std::string value) { + std::lock_guard lockSet(setParameterCallbackMutex_); AUDIO_INFO_LOG("OnAudioParameterChange Callback from networkId: %s", netWorkId.c_str()); if (callback_ != nullptr) { @@ -438,6 +439,7 @@ void AudioServer::OnAudioParameterChange(std::string netWorkId, const AudioParam int32_t AudioServer::SetParameterCallback(const sptr& object) { + std::lock_guard lockSet(setParameterCallbackMutex_); CHECK_AND_RETURN_RET_LOG(object != nullptr, ERR_INVALID_PARAM, "AudioServer:set listener object is nullptr"); sptr listener = iface_cast(object);