"""OS lock shared by every SDK effect and exclusive profile activation.""" import fcntl from contextlib import contextmanager from pathlib import Path ROOT = Path("/var/lib/mission-core-insta360") @contextmanager def acquisition(wait=False): path = ROOT / "lifecycle.lock" for item in (ROOT, path): info = item.lstat() if item.is_symlink() or info.st_uid != 0 or info.st_mode & 0o022: raise RuntimeError("Untrusted camera lifecycle lock") with path.open("rb") as handle: try: fcntl.flock(handle, fcntl.LOCK_SH | (0 if wait else fcntl.LOCK_NB)) except BlockingIOError: raise RuntimeError("Подготовка драйвера ещё выполняется.") from None if (ROOT / "maintenance").exists(): raise RuntimeError("Драйвер X4 обновляется. Повторите после подготовки.") yield