From: Simon Glass Date: Sun, 18 Sep 2016 22:48:35 +0000 (-0600) Subject: buildman: Allow builds to terminate cleanly X-Git-Tag: v2016.11-rc2~10^2~39 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=d436e38189a26227274a3014d3d838eb3f183488;p=oweals%2Fu-boot.git buildman: Allow builds to terminate cleanly It is annoying that buildman does not respond cleanly to Ctrl-C or SIGINT, particularly on machines with lots of CPUS. Unfortunately queue.join() blocks the main thread and does not allow it to see the signal. Use a separate thread instead, Signed-off-by: Simon Glass --- diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py index 384f053015..44d1cfa517 100644 --- a/tools/buildman/builder.py +++ b/tools/buildman/builder.py @@ -14,6 +14,7 @@ import Queue import shutil import string import sys +import threading import time import builderthread @@ -1443,8 +1444,11 @@ class Builder: job.step = self._step self.queue.put(job) - # Wait until all jobs are started - self.queue.join() + term = threading.Thread(target=self.queue.join) + term.setDaemon(True) + term.start() + while term.isAlive(): + term.join(100) # Wait until we have processed all output self.out_queue.join()