From dff7948245711f77f9a76349d9a8aef9638c1d1b Mon Sep 17 00:00:00 2001 From: dijunkun Date: Tue, 25 Mar 2025 17:36:33 +0800 Subject: [PATCH] [fix] clear task queue before IceTransportController released --- src/common/task_queue.h | 19 +++++++++++++++++-- src/transport/ice_transport_controller.cpp | 7 +++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/common/task_queue.h b/src/common/task_queue.h index 77c55fa..65d85fb 100644 --- a/src/common/task_queue.h +++ b/src/common/task_queue.h @@ -54,12 +54,27 @@ class TaskQueue { std::chrono::steady_clock::now() + std::chrono::milliseconds(delay_ms); { std::unique_lock lock(mutex_); - taskQueue_.emplace(execute_time, - std::move(task)); // 确保参数匹配 TaskItem 构造 + taskQueue_.emplace(execute_time, std::move(task)); } cond_var_.notify_one(); } + void ClearTasks() { + { + std::unique_lock lock(mutex_); + stop_ = true; + while (!taskQueue_.empty()) { + taskQueue_.pop(); + } + } + cond_var_.notify_all(); + for (std::thread &worker : workers_) { + if (worker.joinable()) { + worker.join(); + } + } + } + private: struct TaskItem { std::chrono::steady_clock::time_point execute_time; diff --git a/src/transport/ice_transport_controller.cpp b/src/transport/ice_transport_controller.cpp index a9a3f73..f71b845 100644 --- a/src/transport/ice_transport_controller.cpp +++ b/src/transport/ice_transport_controller.cpp @@ -26,6 +26,13 @@ IceTransportController::IceTransportController( } IceTransportController::~IceTransportController() { + if (task_queue_cc_) { + task_queue_cc_->ClearTasks(); + } + if (task_queue_encode_) { + task_queue_encode_->ClearTasks(); + } + user_data_ = nullptr; video_codec_inited_ = false; audio_codec_inited_ = false;