mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 04:06:14 +00:00
Merge pull request #90470 from RandomShaper/fix_cmd_queue_mt_reentrancy
CommandQueueMT: Fix flush re-entrancy
This commit is contained in:
commit
8ec0372f01
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user