From 79aaef9986b433a617cab71e45a1e9335dcb2a03 Mon Sep 17 00:00:00 2001 From: Sergei Trofimov Date: Thu, 1 Mar 2018 17:09:43 +0000 Subject: [PATCH] fw/execution: abort and unresponsive target handling Make sure KeyboardInterrupt's and unresponsive target errors are caught and handled at appropriate points in the execution. --- wa/framework/execution.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/wa/framework/execution.py b/wa/framework/execution.py index fc94f240..fbf9a29c 100644 --- a/wa/framework/execution.py +++ b/wa/framework/execution.py @@ -420,14 +420,15 @@ class Runner(object): log.indent() self.do_run_job(job, context) job.set_status(Status.OK) - except KeyboardInterrupt: - job.set_status(Status.ABORTED) - raise - except Exception as e: # pylint: disable=broad-except - job.set_status(Status.FAILED) - context.add_event(e.message) + except (Exception, KeyboardInterrupt) as e: # pylint: disable=broad-except log.log_error(e, self.logger) - if isinstance(e, ExecutionError): + if isinstance(e, KeyboardInterrupt): + job.set_status(Status.ABORTED) + raise e + else: + job.set_status(Status.FAILED) + context.add_event(e.message) + if isinstance(e, TargetNotRespondingError): raise e elif isinstance(e, TargetError): context.tm.verify_target_responsive() @@ -464,6 +465,9 @@ class Runner(object): try: with signal.wrap('JOB_EXECUTION', self, context): job.run(context) + except KeyboardInterrupt: + job.set_status(Status.ABORTED) + raise except Exception as e: job.set_status(Status.FAILED) log.log_error(e, self.logger) @@ -484,7 +488,6 @@ class Runner(object): except KeyboardInterrupt: job.set_status(Status.ABORTED) - self.logger.info('Got CTRL-C. Aborting.') raise finally: # If setup was successfully completed, teardown must