commit: 6b47521a3c7cdebeec1d540dffd5cd1a7796af98
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Nov 8 07:28:59 2025 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Nov 8 07:28:59 2025 +0000
URL: https://gitweb.gentoo.org/proj/steve.git/commit/?id=6b47521a
Use context managers to maintain FIFOs
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
steve.py | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/steve.py b/steve.py
index 241e8d9..ba08c67 100755
--- a/steve.py
+++ b/steve.py
@@ -8,6 +8,7 @@
from __future__ import annotations
import argparse
+import contextlib
import multiprocessing
import os
import signal
@@ -26,6 +27,15 @@ def exit_sig_handler(signum: int, _: FrameType | None) ->
None:
raise SystemExit(0)
[email protected]
+def hold_fifo(path: Path) -> None:
+ os.mkfifo(path)
+ try:
+ yield
+ finally:
+ path.unlink()
+
+
def main() -> None:
signal.signal(signal.SIGINT, exit_sig_handler)
signal.signal(signal.SIGTERM, exit_sig_handler)
@@ -58,11 +68,11 @@ def main() -> None:
if args.jobs <= 0:
argp.error("--jobs must be larger than 0")
- if args.control_fifo is not None:
- os.mkfifo(args.control_fifo)
+ with contextlib.ExitStack() as context_managers:
+ if args.control_fifo is not None:
+ context_managers.enter_context(hold_fifo(args.control_fifo))
- os.mkfifo(args.path)
- try:
+ context_managers.enter_context(hold_fifo(args.path))
_ = os.open(args.path, os.O_RDONLY | os.O_NONBLOCK)
job_file = args.path.open("wb")
if args.control_fifo is not None:
@@ -82,10 +92,6 @@ def main() -> None:
else:
while True:
signal.pause()
- finally:
- args.path.unlink()
- if args.control_fifo is not None:
- args.control_fifo.unlink()
if __name__ == "__main__":