Browse Source

CommandQueueMT: Fix command cleanup (revive destructor call + plus handle buffer realloc)

Pedro J. Estébanez 1 year ago
parent
commit
6f0760beb3
1 changed files with 5 additions and 1 deletions
  1. 5 1
      core/templates/command_queue_mt.h

+ 5 - 1
core/templates/command_queue_mt.h

@@ -302,7 +302,7 @@ class CommandQueueMT {
 	struct CommandBase {
 	struct CommandBase {
 		bool sync = false;
 		bool sync = false;
 		virtual void call() = 0;
 		virtual void call() = 0;
-		virtual ~CommandBase() = default; // Won't be called.
+		virtual ~CommandBase() = default;
 	};
 	};
 
 
 	struct SyncCommand : public CommandBase {
 	struct SyncCommand : public CommandBase {
@@ -368,6 +368,10 @@ class CommandQueueMT {
 				sync_cond_var.notify_all();
 				sync_cond_var.notify_all();
 			}
 			}
 
 
+			// If the command involved reallocating the buffer, the address may have changed.
+			cmd = reinterpret_cast<CommandBase *>(&command_mem[flush_read_ptr]);
+			cmd->~CommandBase();
+
 			flush_read_ptr += size;
 			flush_read_ptr += size;
 		}
 		}
 		WorkerThreadPool::thread_exit_command_queue_mt_flush();
 		WorkerThreadPool::thread_exit_command_queue_mt_flush();