CommandQueueMT: Fix flush re-entrancy

This commit is contained in:
Pedro J. Estébanez 2024-04-10 09:57:33 +02:00
parent e5b4ef8e95
commit 114b14b0fa

View file

@ -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();