From 0d9d01e0e8f1698d41dc27ac89e579923ba7a3a5 Mon Sep 17 00:00:00 2001 From: yangli Date: Thu, 17 Aug 2023 20:32:14 +0800 Subject: [PATCH] 817 Signed-off-by: yangli --- .../screenregionmgr/2.0/src/screenregion.cpp | 6 +++--- .../sourceservice/dscreenmgr/2.0/src/dscreen.cpp | 1 - .../screensourcetrans/include/screen_source_trans.h | 1 - .../screensourcetrans/src/screen_source_trans.cpp | 10 ++-------- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp b/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp index 413cf2ac..139bf200 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp @@ -27,6 +27,7 @@ #include "screen.h" #include "screen_client.h" #include "screen_client_common.h" +#include "2.0/include/screenregionmgr.h" namespace OHOS { namespace DistributedHardware { @@ -115,12 +116,10 @@ int32_t ScreenRegion::StopReceiverEngine() { DHLOGI("StopReceiverEngine, remoteDevId: %s, screenId is: %" PRIu64, GetAnonyString(remoteDevId_).c_str(), screenId_); - int32_t ret = ScreenClient::GetInstance().RemoveWindow(windowId_); if (ret != DH_SUCCESS) { DHLOGE("remove window failed."); } - if (receiverAdapter_ == nullptr) { DHLOGE("av transport receiver adapter is null."); return ERR_DH_AV_TRANS_NULL_VALUE; @@ -242,9 +241,10 @@ void ScreenRegion::PublishMessage(const DHTopic topic, const uint64_t &screenId, void ScreenRegion::OnEngineEvent(DScreenEventType event, const std::string &content) { - (void)content; if (event == DScreenEventType::ENGINE_ERROR) { StopReceiverEngine(); + } else if (event == DScreenEventType::TRANS_CHANNEL_CLOSED) { + ScreenRegionManager::GetInstance().DestoryDScreenRegion(content); } } diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp index 9b53d9ef..ce9557a0 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp @@ -547,7 +547,6 @@ int32_t DScreen::ChooseCodecType(const std::vector &localVideoEnco return DH_SUCCESS; } - void DScreen::TaskThreadLoop() { DHLOGI("DScreen taskThread start. devId: %s, dhId: %s", GetAnonyString(devId_).c_str(), diff --git a/services/screentransport/screensourcetrans/include/screen_source_trans.h b/services/screentransport/screensourcetrans/include/screen_source_trans.h index dbc0f6af..c0b8c0ec 100644 --- a/services/screentransport/screensourcetrans/include/screen_source_trans.h +++ b/services/screentransport/screensourcetrans/include/screen_source_trans.h @@ -71,7 +71,6 @@ private: std::condition_variable sessionCond_; std::condition_variable dataCond_; std::mutex dataQueueMtx_; - std::thread sendDataThread_; bool isChannelReady_ = false; sptr consumerSurface_; diff --git a/services/screentransport/screensourcetrans/src/screen_source_trans.cpp b/services/screentransport/screensourcetrans/src/screen_source_trans.cpp index 7802c84b..2e1c8d7d 100644 --- a/services/screentransport/screensourcetrans/src/screen_source_trans.cpp +++ b/services/screentransport/screensourcetrans/src/screen_source_trans.cpp @@ -162,6 +162,7 @@ int32_t ScreenSourceTrans::Stop() } } + isChannelReady_ = false; StartTrace(DSCREEN_HITRACE_LABEL, DSCREEN_SOURCE_CLOSE_SESSION_START); ret = screenChannel_->CloseSession(); FinishTrace(DSCREEN_HITRACE_LABEL); @@ -169,10 +170,6 @@ int32_t ScreenSourceTrans::Stop() DHLOGD("%s: Close Session failed ret: %" PRId32, LOG_TAG, ret); stopStatus = false; } - isChannelReady_ = false; - if (sendDataThread_.joinable()) { - sendDataThread_.join(); - } if (!stopStatus) { DHLOGE("%s: Stop source trans failed.", LOG_TAG); @@ -358,7 +355,7 @@ void ScreenSourceTrans::OnSessionOpened() isChannelReady_ = true; DHLOGI("%s: Start thread.", LOG_TAG); - sendDataThread_ = std::thread(&ScreenSourceTrans::FeedChannelData, this); + std::thread(&ScreenSourceTrans::FeedChannelData, this).detach(); std::unique_lock lck(sessionMtx_); sessionCond_.notify_all(); } @@ -367,9 +364,6 @@ void ScreenSourceTrans::OnSessionClosed() { DHLOGI("%s: OnChannelSessionClosed.", LOG_TAG); isChannelReady_ = false; - if (sendDataThread_.joinable()) { - sendDataThread_.join(); - } std::shared_ptr callback = transCallback_.lock(); if (callback == nullptr) { -- Gitee