diff --git a/src/cpu_worker.rs b/src/cpu_worker.rs index 3383de6e..578a8d46 100644 --- a/src/cpu_worker.rs +++ b/src/cpu_worker.rs @@ -200,6 +200,15 @@ impl Drop for PendingJob { } impl CpuWorkerData { + fn clear(&self) { + self.jobs_to_enqueue.clear(); + self.new_jobs.lock().clear(); + self.completed_jobs_remote.lock().queue.clear(); + self.completed_jobs_local.borrow_mut().clear(); + self.pending_jobs.clear(); + self.pending_job_data_cache.take(); + } + async fn wait_for_completions(self: Rc) { let mut buf = TypedBuf::::new(); loop { @@ -302,6 +311,10 @@ impl CpuWorker { }) } + pub fn clear(&self) { + self.data.clear(); + } + pub fn submit(&self, job: Box) -> PendingJob { let mut job = NonNull::from(Box::leak(job)); let id = self.data.next.next(); diff --git a/src/state.rs b/src/state.rs index ae366f72..66035332 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1072,6 +1072,7 @@ impl State { self.const_40hz_latch.clear(); self.cursor_user_groups.clear(); self.cursor_user_group_hardware_cursor.take(); + self.cpu_worker.clear(); } pub fn remove_toplevel_id(&self, id: ToplevelIdentifier) {