diff --git a/src/cocoindex_code/daemon.py b/src/cocoindex_code/daemon.py index 355aa53..a1a4286 100644 --- a/src/cocoindex_code/daemon.py +++ b/src/cocoindex_code/daemon.py @@ -256,6 +256,17 @@ def remove_project(self, project_root: str) -> bool: gc.collect() return was_loaded + def close_all(self) -> None: + """Close all loaded projects and release resources.""" + import gc + + for project in self._projects.values(): + project.close() + self._projects.clear() + self._index_locks.clear() + self._indexing.clear() + gc.collect() + def list_projects(self) -> list[DaemonProjectInfo]: """List all loaded projects with their indexing state.""" return [ @@ -519,3 +530,4 @@ def _accept_loop() -> None: accept_thread.join(timeout=2) if tasks: await asyncio.gather(*tasks, return_exceptions=True) + registry.close_all()