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__":

Reply via email to