Improve file lock timing reliability on macOS

This commit is contained in:
thePR0M3TH3AN
2025-07-01 15:25:08 -04:00
parent d7ea493663
commit 0d3d626f09

View File

@@ -19,14 +19,22 @@ def _try_lock(path: Path, wait_time: mp.Value):
wait_time.value = time.perf_counter() - t0 wait_time.value = time.perf_counter() - t0
def test_exclusive_lock_blocks_until_released(tmp_path: Path): def test_exclusive_lock_blocks_until_released(tmp_path: Path) -> None:
file_path = tmp_path / "locktest.txt" file_path = tmp_path / "locktest.txt"
started = mp.Event() # Use 'fork' start method when available for more deterministic timing on
wait_time = mp.Value("d", 0.0) # platforms like macOS where the default 'spawn' method can delay process
# startup significantly.
if "fork" in mp.get_all_start_methods():
ctx = mp.get_context("fork")
else:
ctx = mp.get_context()
p1 = mp.Process(target=_hold_lock, args=(file_path, 1.0, started)) started = ctx.Event()
p2 = mp.Process(target=_try_lock, args=(file_path, wait_time)) wait_time = ctx.Value("d", 0.0)
p1 = ctx.Process(target=_hold_lock, args=(file_path, 1.0, started))
p2 = ctx.Process(target=_try_lock, args=(file_path, wait_time))
p1.start() p1.start()
started.wait() started.wait()