diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp index d708c4217247845e4211c34efac19fe668c80afc..1b0d09936bd0cfd46a5c94cd0a37e3687ef9f246 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp @@ -206,8 +206,9 @@ int32_t AVTransSenderAdapter::RegisterAdapterCallback(const std::shared_ptr lock(chnCreatedMtx_); - auto status = chnCreatedCondVar_.wait_for(lock, std::chrono::milliseconds(WAIT_TIMEOUT_MS)); - if (status == std::cv_status::timeout) { + auto status = chnCreatedCondVar_.wait_for(lock, std::chrono::milliseconds(WAIT_TIMEOUT_MS), + [this]() { return chnCreateSuccess_.load(); }); + if (!status) { DHLOGE("wait for av transport sender channel created timeout"); return ERR_DH_AV_TRANS_TIMEOUT; } @@ -221,8 +222,9 @@ int32_t AVTransSenderAdapter::WaitForChannelCreated() int32_t AVTransSenderAdapter::WaitForAVTransStarted() { std::unique_lock lock(transStartedMtx_); - auto status = transStartedCondVar_.wait_for(lock, std::chrono::milliseconds(WAIT_TIMEOUT_MS)); - if (status == std::cv_status::timeout) { + auto status = transStartedCondVar_.wait_for(lock, std::chrono::milliseconds(WAIT_TIMEOUT_MS), + [this]() { return transStartSuccess_.load(); }); + if (!status) { DHLOGE("wait for av transport sender started timeout"); return ERR_DH_AV_TRANS_TIMEOUT; } diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp index 41ccbcbbd9b598cada6a70b147cf8618cbea74e8..d3dd81955801a48201dc5e51b9121147f68950c2 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp @@ -80,6 +80,7 @@ DScreen::~DScreen() ScreenMgrAdapter::GetInstance().RemoveVirtualScreen(screenId_); videoParam_ = nullptr; senderAdapter_ = nullptr; + sinkStartSuccess_ = false; DHLOGD("DScreen deconstruct end."); } @@ -498,8 +499,9 @@ int32_t DScreen::SetUp() int32_t DScreen::WaitForSinkStarted() { std::unique_lock lock(waitSinkMtx_); - auto status = waitSinkCondVar_.wait_for(lock, std::chrono::milliseconds(WAIT_TIMEOUT_MS)); - if (status == std::cv_status::timeout) { + auto status = waitSinkCondVar_.wait_for(lock, std::chrono::milliseconds(WAIT_TIMEOUT_MS), + [this]() { return sinkStartSuccess_.load(); }); + if (!status) { DHLOGE("wait for sink device engine start timeout"); return ERR_DH_AV_TRANS_TIMEOUT; }