From 1f71905e28892d3fe3a1e023040760df849d4d8b Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Wed, 16 Dec 2015 10:35:37 -0200 Subject: [PATCH] Use explicit try/finally to ensure loops quit when receiving a signal Fix #114 --- pytestqt/wait_signal.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/pytestqt/wait_signal.py b/pytestqt/wait_signal.py index 8d70f6e7..0b8b0876 100644 --- a/pytestqt/wait_signal.py +++ b/pytestqt/wait_signal.py @@ -48,8 +48,10 @@ def wait(self): self.timeout) def _quit_loop_by_timeout(self): - self._loop.quit() - self._cleanup() + try: + self._cleanup() + finally: + self._loop.quit() def _cleanup(self): if self._timer is not None: @@ -119,10 +121,12 @@ def _quit_loop_by_signal(self, *args): """ quits the event loop and marks that we finished because of a signal. """ - self.signal_triggered = True - self.args = list(args) - self._loop.quit() - self._cleanup() + try: + self.signal_triggered = True + self.args = list(args) + self._cleanup() + finally: + self._loop.quit() def _cleanup(self): super(SignalBlocker, self)._cleanup() @@ -171,8 +175,10 @@ def _signal_emitted(self, signal): """ self._signals[signal] = True if all(self._signals.values()): - self.signal_triggered = True - self._loop.quit() + try: + self.signal_triggered = True + finally: + self._loop.quit() class SignalTimeoutError(Exception):