summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/templates/command_queue_mt.h13
1 files changed, 6 insertions, 7 deletions
diff --git a/core/templates/command_queue_mt.h b/core/templates/command_queue_mt.h
index 4056119851..e26f11d28a 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();