[fix] clear task queue before IceTransportController released

This commit is contained in:
dijunkun
2025-03-25 17:36:33 +08:00
parent bcf01791f7
commit dff7948245
2 changed files with 24 additions and 2 deletions

View File

@@ -54,12 +54,27 @@ class TaskQueue {
std::chrono::steady_clock::now() + std::chrono::milliseconds(delay_ms); std::chrono::steady_clock::now() + std::chrono::milliseconds(delay_ms);
{ {
std::unique_lock<std::mutex> lock(mutex_); std::unique_lock<std::mutex> lock(mutex_);
taskQueue_.emplace(execute_time, taskQueue_.emplace(execute_time, std::move(task));
std::move(task)); // 确保参数匹配 TaskItem 构造
} }
cond_var_.notify_one(); cond_var_.notify_one();
} }
void ClearTasks() {
{
std::unique_lock<std::mutex> lock(mutex_);
stop_ = true;
while (!taskQueue_.empty()) {
taskQueue_.pop();
}
}
cond_var_.notify_all();
for (std::thread &worker : workers_) {
if (worker.joinable()) {
worker.join();
}
}
}
private: private:
struct TaskItem { struct TaskItem {
std::chrono::steady_clock::time_point execute_time; std::chrono::steady_clock::time_point execute_time;

View File

@@ -26,6 +26,13 @@ IceTransportController::IceTransportController(
} }
IceTransportController::~IceTransportController() { IceTransportController::~IceTransportController() {
if (task_queue_cc_) {
task_queue_cc_->ClearTasks();
}
if (task_queue_encode_) {
task_queue_encode_->ClearTasks();
}
user_data_ = nullptr; user_data_ = nullptr;
video_codec_inited_ = false; video_codec_inited_ = false;
audio_codec_inited_ = false; audio_codec_inited_ = false;