diff --git a/radicale/config.py b/radicale/config.py index 1e02656..5076ffa 100644 --- a/radicale/config.py +++ b/radicale/config.py @@ -59,7 +59,8 @@ INITIAL_CONFIG = { "filesystem_folder": os.path.expanduser( "~/.config/radicale/collections"), "fsync": "True", - "hook": ""}, + "hook": "", + "close_lock_file": "False"}, "logging": { "config": "/etc/radicale/logging", "debug": "False", diff --git a/radicale/storage.py b/radicale/storage.py index 443fb9d..c89a898 100644 --- a/radicale/storage.py +++ b/radicale/storage.py @@ -793,3 +793,7 @@ class Collection(BaseCollection): cls._lock_file_locked = False if cls._waiters: cls._waiters[0].notify() + if (cls.configuration.getboolean("storage", "close_lock_file") + and cls._readers == 0 and not cls._waiters): + cls._lock_file.close() + cls._lock_file = None \ No newline at end of file diff --git a/radicale/tests/test_base.py b/radicale/tests/test_base.py index 2e39fc4..1ea8c1f 100644 --- a/radicale/tests/test_base.py +++ b/radicale/tests/test_base.py @@ -813,6 +813,8 @@ class BaseFileSystemTest(BaseTest): self.configuration.set("storage", "filesystem_folder", self.colpath) # Disable syncing to disk for better performance self.configuration.set("storage", "fsync", "False") + # Required on Windows, doesn't matter on Unix + self.configuration.set("storage", "close_lock_file", "True") self.application = Application(self.configuration, self.logger) def teardown(self):