From 5a67845a119f517f18eb3e2f3bc2a164b5a8cdc3 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Mon, 21 Jul 2025 09:33:03 +0200 Subject: [PATCH] prjxray/util.py: replaced fcntl by flufl.lock to allows using script via NFS --- prjxray/util.py | 15 ++++++++------- requirements.txt | 1 + 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/prjxray/util.py b/prjxray/util.py index 615bf726..754f800e 100644 --- a/prjxray/util.py +++ b/prjxray/util.py @@ -8,7 +8,7 @@ # https://opensource.org/licenses/ISC # # SPDX-License-Identifier: ISC -import fcntl +from flufl.lock import Lock import math import os import random @@ -31,10 +31,12 @@ class OpenSafeFile: def __init__(self, name, mode="r", timeout=10): self.name = name + self.lock_name = self.name + ".lock" self.mode = mode self.timeout = timeout self.fd = None + self.lock = None def __enter__(self): self.fd = open(self.name, self.mode) @@ -48,17 +50,16 @@ class OpenSafeFile: def lock_file(self): assert self.fd is not None try: - signal.signal(signal.SIGALRM, timeout_handler) - signal.alarm(self.timeout) - fcntl.flock(self.fd.fileno(), fcntl.LOCK_EX) - signal.alarm(0) - except Exception as e: + self.lock = Lock(self.lock_name, lifetime=self.timeout) + self.lock.lock() + except TimeoutError as e: print(f"{e}: {self.name}") exit(1) def unlock_file(self): assert self.fd is not None - fcntl.flock(self.fd.fileno(), fcntl.LOCK_UN) + assert self.lock is not None + self.lock.unlock() def get_db_root(): diff --git a/requirements.txt b/requirements.txt index 54210815..8e680caf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +flufl.lock intervaltree junit-xml numpy