Ver código fonte

Merge pull request #90470 from RandomShaper/fix_cmd_queue_mt_reentrancy

CommandQueueMT: Fix flush re-entrancy
Rémi Verschelde 1 ano atrás
pai
commit
8ec0372f01
1 arquivos alterados com 6 adições e 7 exclusões
  1. 6 7
      core/templates/command_queue_mt.h

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