From 8f71f7310a764e5e505423a54c2c3173dcacb44f Mon Sep 17 00:00:00 2001 From: t00605578 Date: Mon, 31 Jul 2023 16:18:18 +0800 Subject: [PATCH] fix HDF wait SA handle too long Signed-off-by: t00605578 --- .../v1_0/src/audio_adapter_interface_impl.cpp | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/hdf_service/distributed_audio/hdi_service/audio/v1_0/src/audio_adapter_interface_impl.cpp b/hdf_service/distributed_audio/hdi_service/audio/v1_0/src/audio_adapter_interface_impl.cpp index adf8f2f0..6fdb2734 100644 --- a/hdf_service/distributed_audio/hdi_service/audio/v1_0/src/audio_adapter_interface_impl.cpp +++ b/hdf_service/distributed_audio/hdi_service/audio/v1_0/src/audio_adapter_interface_impl.cpp @@ -783,16 +783,18 @@ int32_t AudioAdapterInterfaceImpl::WaitForSANotify(const AudioDeviceEvent &event if (event == EVENT_OPEN_SPK || event == EVENT_CLOSE_SPK) { spkNotifyFlag_ = false; std::unique_lock lck(spkWaitMutex_); - auto status = - spkWaitCond_.wait_for(lck, std::chrono::seconds(WAIT_SECONDS), [this]() { return spkNotifyFlag_; }); + auto status = spkWaitCond_.wait_for(lck, std::chrono::seconds(WAIT_SECONDS), [this, event]() { + return spkNotifyFlag_ || + (event == EVENT_OPEN_SPK && isSpkOpened_) || (event == EVENT_CLOSE_SPK && !isSpkOpened_); + }); if (!status) { DHLOGE("Wait spk event: %d timeout(%d)s.", event, WAIT_SECONDS); return ERR_DH_AUDIO_HDF_WAIT_TIMEOUT; } - if (event == EVENT_OPEN_SPK && isSpkOpened_ != true) { + if (event == EVENT_OPEN_SPK && !isSpkOpened_) { DHLOGE("Wait open render device failed."); return ERR_DH_AUDIO_HDF_OPEN_DEVICE_FAIL; - } else if (event == EVENT_CLOSE_SPK && isSpkOpened_ != false) { + } else if (event == EVENT_CLOSE_SPK && isSpkOpened_) { DHLOGE("Wait close render device failed."); return ERR_DH_AUDIO_HDF_CLOSE_DEVICE_FAIL; } @@ -802,16 +804,18 @@ int32_t AudioAdapterInterfaceImpl::WaitForSANotify(const AudioDeviceEvent &event if (event == EVENT_OPEN_MIC || event == EVENT_CLOSE_MIC) { micNotifyFlag_ = false; std::unique_lock lck(micWaitMutex_); - auto status = - micWaitCond_.wait_for(lck, std::chrono::seconds(WAIT_SECONDS), [this]() { return micNotifyFlag_; }); + auto status = micWaitCond_.wait_for(lck, std::chrono::seconds(WAIT_SECONDS), [this, event]() { + return micNotifyFlag_ || + (event == EVENT_OPEN_MIC && isMicOpened_) || (event == EVENT_CLOSE_MIC && !isMicOpened_); + }); if (!status) { DHLOGE("Wait mic event: %d timeout(%d)s.", event, WAIT_SECONDS); return ERR_DH_AUDIO_HDF_WAIT_TIMEOUT; } - if (event == EVENT_OPEN_MIC && isMicOpened_ != true) { + if (event == EVENT_OPEN_MIC && !isMicOpened_) { DHLOGE("Wait open capture device failed."); return ERR_DH_AUDIO_HDF_OPEN_DEVICE_FAIL; - } else if (event == EVENT_CLOSE_MIC && isMicOpened_ != false) { + } else if (event == EVENT_CLOSE_MIC && isMicOpened_) { DHLOGE("Wait close capture device failed."); return ERR_DH_AUDIO_HDF_CLOSE_DEVICE_FAIL; } -- Gitee