From 75492cf82b4692eca5939f22c8db1fb89d278df7 Mon Sep 17 00:00:00 2001 From: Jeff Peeler Date: Fri, 6 May 2016 17:37:42 -0400 Subject: [PATCH] Implement non-default signal handler for SIGINT Pressing Ctrl-C will stop a build, but does not clean up the /tmp directory of dockerfiles. Implement a signal handler such that clean up does occur. Python apparently ignores signals while calling join on a queue, so that's why the small modification was needed there. Change-Id: I43faf67726c154b6640d3596aea61ffc59871999 Closes-Bug: #1579242 --- kolla/cmd/build.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py index b305ffd7b4..d80375623c 100755 --- a/kolla/cmd/build.py +++ b/kolla/cmd/build.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# TODO(jpeeler): Add clean up handler for SIGINT from __future__ import print_function import datetime @@ -55,7 +54,13 @@ logging.basicConfig() LOG = logging.getLogger(__name__) LOG.setLevel(logging.INFO) -signal.signal(signal.SIGINT, signal.SIG_DFL) + +def handle_ctrlc(single, frame): + kollaobj = frame.f_locals['kolla'] + kollaobj.cleanup() + sys.exit(1) + +signal.signal(signal.SIGINT, handle_ctrlc) class KollaDirNotFoundException(Exception): @@ -773,9 +778,9 @@ def main(): push_thread = PushThread(conf, push_queue) push_thread.start() - # block until queue is empty - queue.join() - push_queue.join() + # sleep until queue is empty + while queue.unfinished_tasks or push_queue.unfinished_tasks: + time.sleep(3) kolla.summary() kolla.cleanup()