[Concept,08/20] buildman: Add handle_signals param to Builder

Message ID 20260316154733.1587261-9-sjg@u-boot.org
State New
Headers
Series buildman: Add distributed builds |

Commit Message

Simon Glass March 16, 2026, 3:47 p.m. UTC
  From: Simon Glass <sjg@chromium.org>

The distributed-build worker manages its own signal handling (SIGTERM,
SIGINT, SIGHUP) to clean up child processes on exit.

Add a handle_signals parameter (default True) so the worker can skip
Builder's built-in SIGINT handler and avoid conflicting with its own.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 tools/buildman/builder.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
  

Patch

diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py
index f64331d0fb1..53ec604f654 100644
--- a/tools/buildman/builder.py
+++ b/tools/buildman/builder.py
@@ -231,7 +231,8 @@  class Builder:
                  force_reconfig=False,
                  in_tree=False, force_config_on_failure=False, make_func=None,
                  dtc_skip=False, build_target=None,
-                 thread_class=builderthread.BuilderThread):
+                 thread_class=builderthread.BuilderThread,
+                 handle_signals=True):
         """Create a new Builder object
 
         Args:
@@ -289,6 +290,9 @@  class Builder:
                 builderthread.BuilderThread). This allows the caller to
                 override how results are processed, e.g. sending over SSH
                 instead of writing to disk.
+            handle_signals (bool): True to register SIGINT handler (default
+                True). Set to False when running inside a worker that has
+                its own signal handling.
         """
         self.toolchains = toolchains
         self.base_dir = base_dir
@@ -380,7 +384,8 @@  class Builder:
         self._re_make_err = re.compile('|'.join(ignore_lines))
 
         # Handle existing graceful with SIGINT / Ctrl-C
-        signal.signal(signal.SIGINT, self._signal_handler)
+        if handle_signals:
+            signal.signal(signal.SIGINT, self._signal_handler)
 
     def _setup_threads(self, mrproper, per_board_out_dir,
                        test_thread_exceptions):