diff options
Diffstat (limited to 'meta')
| -rw-r--r-- | meta/lib/oeqa/core/decorator/oetimeout.py | 40 | 
1 files changed, 30 insertions, 10 deletions
| diff --git a/meta/lib/oeqa/core/decorator/oetimeout.py b/meta/lib/oeqa/core/decorator/oetimeout.py index a247583f7f..f85e7d9792 100644 --- a/meta/lib/oeqa/core/decorator/oetimeout.py +++ b/meta/lib/oeqa/core/decorator/oetimeout.py @@ -1,8 +1,12 @@  # Copyright (C) 2016 Intel Corporation  # Released under the MIT license (see COPYING.MIT) -import signal  from . import OETestDecorator, registerDecorator + +import signal +from threading import Timer + +from oeqa.core.threaded import OETestRunnerThreaded  from oeqa.core.exception import OEQATimeoutError  @registerDecorator @@ -10,16 +14,32 @@ class OETimeout(OETestDecorator):      attrs = ('oetimeout',)      def setUpDecorator(self): -        timeout = self.oetimeout -        def _timeoutHandler(signum, frame): -            raise OEQATimeoutError("Timed out after %s " +        self.logger.debug("Setting up a %d second(s) timeout" % self.oetimeout) + +        if isinstance(self.case.tc.runner, OETestRunnerThreaded): +            self.timeouted = False +            def _timeoutHandler(): +                self.timeouted = True + +            self.timer = Timer(self.oetimeout, _timeoutHandler) +            self.timer.start() +        else: +            timeout = self.oetimeout +            def _timeoutHandler(signum, frame): +                raise OEQATimeoutError("Timed out after %s "                      "seconds of execution" % timeout) -        self.logger.debug("Setting up a %d second(s) timeout" % self.oetimeout) -        self.alarmSignal = signal.signal(signal.SIGALRM, _timeoutHandler) -        signal.alarm(self.oetimeout) +            self.alarmSignal = signal.signal(signal.SIGALRM, _timeoutHandler) +            signal.alarm(self.oetimeout)      def tearDownDecorator(self): -        signal.alarm(0) -        signal.signal(signal.SIGALRM, self.alarmSignal) -        self.logger.debug("Removed SIGALRM handler") +        if isinstance(self.case.tc.runner, OETestRunnerThreaded): +            self.timer.cancel() +            self.logger.debug("Removed Timer handler") +            if self.timeouted: +                raise OEQATimeoutError("Timed out after %s " +                    "seconds of execution" % self.oetimeout) +        else: +            signal.alarm(0) +            signal.signal(signal.SIGALRM, self.alarmSignal) +            self.logger.debug("Removed SIGALRM handler") | 
