From 114b14b0fa2bc6dea0163bd1343a4dca3abb86a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Wed, 10 Apr 2024 09:57:33 +0200 Subject: [PATCH] CommandQueueMT: Fix flush re-entrancy --- core/templates/command_queue_mt.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/core/templates/command_queue_mt.h b/core/templates/command_queue_mt.h index 405611985177..e26f11d28ab0 100644 --- a/core/templates/command_queue_mt.h +++ b/core/templates/command_queue_mt.h @@ -364,6 +364,12 @@ class CommandQueueMT { void _flush() { lock(); + if (unlikely(flush_read_ptr)) { + // Re-entrant call. + unlock(); + return; + } + WorkerThreadPool::thread_enter_command_queue_mt_flush(this); while (flush_read_ptr < command_mem.size()) { uint64_t size = *(uint64_t *)&command_mem[flush_read_ptr]; @@ -376,13 +382,6 @@ class CommandQueueMT { sync_sem->sem.post(); // Release in case it needs sync/ret. } - if (unlikely(flush_read_ptr == 0)) { - // A reentrant call flushed. - DEV_ASSERT(command_mem.is_empty()); - unlock(); - return; - } - flush_read_ptr += size; } WorkerThreadPool::thread_exit_command_queue_mt_flush();