From b38bb29a32e08f12957c086b7705852eef0a7ee4 Mon Sep 17 00:00:00 2001 From: darkshadow Date: Sat, 6 Sep 2025 19:18:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AD=BB=E9=94=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: darkshadow --- .../domain/zone/src/audio_zone_service.cpp | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/services/audio_policy/server/domain/zone/src/audio_zone_service.cpp b/services/audio_policy/server/domain/zone/src/audio_zone_service.cpp index b37eeff3bd..045a0d30af 100644 --- a/services/audio_policy/server/domain/zone/src/audio_zone_service.cpp +++ b/services/audio_policy/server/domain/zone/src/audio_zone_service.cpp @@ -62,6 +62,7 @@ int32_t AudioZoneService::CreateAudioZone(const std::string &name, const AudioZo std::shared_ptr zone = std::make_shared(zoneClientManager_, name, context, clientPid); CHECK_AND_RETURN_RET_LOG(zone != nullptr, ERROR, "zone is nullptr"); int32_t zoneId = zone->GetId(); + std::shared_ptr tmp = nullptr; { std::lock_guard lock(zoneMutex_); CHECK_AND_RETURN_RET_LOG(zoneMaps_.find(zoneId) == zoneMaps_.end(), @@ -73,10 +74,10 @@ int32_t AudioZoneService::CreateAudioZone(const std::string &name, const AudioZo for (auto &pid : zoneReportClientList_) { zoneClientManager_->SendZoneAddEvent(pid, zone->GetDescriptor()); } - - CHECK_AND_RETURN_RET_LOG(interruptService_ != nullptr, ERROR, "interruptService_ is nullptr"); - interruptService_->CreateAudioInterruptZone(zoneId, context); + tmp = interruptService_; } + CHECK_AND_RETURN_RET_LOG(tmp != nullptr, ERROR, "interruptService_ tmp is nullptr"); + tmp->CreateAudioInterruptZone(zoneId, context); AUDIO_INFO_LOG("create zone id %{public}d, name %{public}s", zoneId, name.c_str()); return zoneId; } @@ -496,12 +497,15 @@ int32_t AudioZoneService::GetSystemVolumeLevel(int32_t zoneId, AudioVolumeType v AudioZoneFocusList AudioZoneService::GetAudioInterruptForZone(int32_t zoneId) { - std::lock_guard lock(zoneMutex_); + std::shared_ptr tmp = nullptr; AudioZoneFocusList interrupts; - CHECK_AND_RETURN_RET_LOG(CheckIsZoneValid(zoneId), interrupts, "zone id %{public}d is not valid", zoneId); - CHECK_AND_RETURN_RET_LOG(interruptService_ != nullptr, interrupts, "interruptService_ is nullptr"); - - interruptService_->GetAudioFocusInfoList(zoneId, interrupts); + { + std::lock_guard lock(zoneMutex_); + CHECK_AND_RETURN_RET_LOG(CheckIsZoneValid(zoneId), interrupts, "zone id %{public}d is not valid", zoneId); + tmp = interruptService_; + } + CHECK_AND_RETURN_RET_LOG(tmp != nullptr, interrupts, "interruptService_ tmp is nullptr"); + tmp->GetAudioFocusInfoList(zoneId, interrupts); return interrupts; } @@ -524,12 +528,15 @@ bool AudioZoneService::CheckZoneExist(int32_t zoneId) AudioZoneFocusList AudioZoneService::GetAudioInterruptForZone(int32_t zoneId, const std::string &deviceTag) { - std::lock_guard lock(zoneMutex_); + std::shared_ptr tmp = nullptr; AudioZoneFocusList interrupts; - CHECK_AND_RETURN_RET_LOG(CheckIsZoneValid(zoneId), interrupts, "zone id %{public}d is not valid", zoneId); - CHECK_AND_RETURN_RET_LOG(interruptService_ != nullptr, interrupts, "interruptService_ is nullptr"); - - interruptService_->GetAudioFocusInfoList(zoneId, deviceTag, interrupts); + { + std::lock_guard lock(zoneMutex_); + CHECK_AND_RETURN_RET_LOG(CheckIsZoneValid(zoneId), interrupts, "zone id %{public}d is not valid", zoneId); + tmp = interruptService_; + } + CHECK_AND_RETURN_RET_LOG(tmp != nullptr, interrupts, "interruptService_ tmp is nullptr"); + tmp->GetAudioFocusInfoList(zoneId, deviceTag, interrupts); return interrupts; } -- Gitee