diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp b/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp index 413cf2ac41d91269cfd59ab2cc6aac6602d0646d..139bf2001c9e19fd994e37c627adb9a31f13493d 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 9b53d9efda63cacf5a6b43af7b1a8968e1f21ef3..ce9557a0c0ac8972afc862f20b9a5f74c9eeb693 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 dbc0f6affa82b434602106debd54d7d14361574a..c0b8c0ec27de288c9596de09752976073b1aab2d 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 7802c84b14b9aeeb7d74b8ed223c1fb1b1708a25..2e1c8d7da6711d6773a49aca4446e8a53014ef52 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) {