diff --git a/services/screentransport/screensinkprocessor/decoder/src/image_sink_decoder.cpp b/services/screentransport/screensinkprocessor/decoder/src/image_sink_decoder.cpp index a210198fe81a49f336b7f99b462c9620cf13ff2e..6f5d65434b9fdf75876d88e02a677db7062b0f06 100644 --- a/services/screentransport/screensinkprocessor/decoder/src/image_sink_decoder.cpp +++ b/services/screentransport/screensinkprocessor/decoder/src/image_sink_decoder.cpp @@ -279,7 +279,9 @@ int32_t ImageSinkDecoder::StopInputThread() { DHLOGI("%s: StopInputThread.", LOG_TAG); isDecoderReady_ = false; - decodeThread_.join(); + if (decodeThread_.joinable()) { + decodeThread_.join(); + } std::lock_guard dataLock(dataMutex_); while (!bufferIndexQueue_.empty()) { bufferIndexQueue_.pop(); diff --git a/services/screentransport/screensourcetrans/src/screen_source_trans.cpp b/services/screentransport/screensourcetrans/src/screen_source_trans.cpp index 6d2ef574b8f5b7ba7ce236ffcb639be1c1e0da7f..0d0133e97b6f65d4fb71ee4e2c03535458e4ef0c 100644 --- a/services/screentransport/screensourcetrans/src/screen_source_trans.cpp +++ b/services/screentransport/screensourcetrans/src/screen_source_trans.cpp @@ -121,7 +121,9 @@ int32_t ScreenSourceTrans::Stop() stopStatus = false; } isChannelReady_ = false; - sendDataThread_.join(); + if (sendDataThread_.joinable()) { + sendDataThread_.join(); + } if (!stopStatus) { DHLOGE("%s: Stop source trans failed.", LOG_TAG); @@ -309,7 +311,9 @@ void ScreenSourceTrans::OnSessionClosed() { DHLOGI("%s: OnChannelSessionClosed.", LOG_TAG); isChannelReady_ = false; - sendDataThread_.join(); + if (sendDataThread_.joinable()) { + sendDataThread_.join(); + } std::shared_ptr callback = transCallback_.lock(); if (!callback) {