Skip to content

Commit ac0e7bb

Browse files
frankistcodebot
authored andcommitted
support: fix deadlock in the task_worker deletion
1 parent 34022aa commit ac0e7bb

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

include/srsran/adt/concurrent_queue.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,14 @@ class queue_impl<T, concurrent_queue_policy::locking_mpsc, BlockingPolicy>
286286
popped_items.reserve(qsize);
287287
}
288288

289-
void request_stop() { barrier.request_stop(); }
289+
void request_stop()
290+
{
291+
std::lock_guard<std::mutex> lock(mutex);
292+
queue.clear();
293+
count_local_objs.store(0, std::memory_order_relaxed);
294+
popped_items.clear();
295+
barrier.request_stop();
296+
}
290297

291298
template <bool BlockOnFull, typename U>
292299
bool push(U&& elem) noexcept
@@ -329,6 +336,7 @@ class queue_impl<T, concurrent_queue_policy::locking_mpsc, BlockingPolicy>
329336
}
330337
count_local_objs.store(0, std::memory_order_relaxed);
331338
popped_items.clear();
339+
barrier.notify_pop();
332340
}
333341

334342
size_t size() const

0 commit comments

Comments
 (0)