Merge pull request #90470 from RandomShaper/fix_cmd_queue_mt_reentrancy

CommandQueueMT: Fix flush re-entrancy
This commit is contained in:
Rémi Verschelde 2024-04-11 11:02:42 +02:00
commit 8ec0372f01
No known key found for this signature in database
GPG Key ID: C3336907360768E1

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