From 093b5159030ed739a3c7d86e3edfec0b98286ba0 Mon Sep 17 00:00:00 2001 From: Reinier van der Leer Date: Fri, 13 Feb 2026 22:05:32 +0100 Subject: [PATCH] address thread safety comment --- .../backend/backend/copilot/executor/manager.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/autogpt_platform/backend/backend/copilot/executor/manager.py b/autogpt_platform/backend/backend/copilot/executor/manager.py index d3b9d82b39..ad7570b7d0 100644 --- a/autogpt_platform/backend/backend/copilot/executor/manager.py +++ b/autogpt_platform/backend/backend/copilot/executor/manager.py @@ -83,6 +83,7 @@ class CoPilotExecutor(AppProcess): self._run_client = None self._task_locks: dict[str, ClusterLock] = {} + self._active_tasks_lock = threading.Lock() # ============ Main Entry Points (AppProcess interface) ============ # @@ -419,13 +420,12 @@ class CoPilotExecutor(AppProcess): def _cleanup_completed_tasks(self) -> list[str]: """Remove completed futures from active_tasks and update metrics.""" completed_tasks = [] - for task_id, (future, _) in self.active_tasks.items(): - if future.done(): - completed_tasks.append(task_id) - - for task_id in completed_tasks: - logger.info(f"Cleaned up completed task {task_id}") - self.active_tasks.pop(task_id, None) + with self._active_tasks_lock: + for task_id, (future, _) in self.active_tasks.items(): + if future.done(): + completed_tasks.append(task_id) + self.active_tasks.pop(task_id, None) + logger.info(f"Cleaned up completed task {task_id}") self._update_metrics() return completed_tasks