diff options
| -rw-r--r-- | src/leap/bitmask/backend.py | 9 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/mainwindow.py | 18 | 
2 files changed, 22 insertions, 5 deletions
| diff --git a/src/leap/bitmask/backend.py b/src/leap/bitmask/backend.py index 41fdc06e..a351a477 100644 --- a/src/leap/bitmask/backend.py +++ b/src/leap/bitmask/backend.py @@ -25,6 +25,7 @@ import time  from functools import partial  from Queue import Queue, Empty +from twisted.internet import reactor  from twisted.internet import threads, defer  from twisted.internet.task import LoopingCall  from twisted.python import log @@ -899,9 +900,17 @@ class Backend(object):          """          Stops the looping call and tries to cancel all the defers.          """ +        reactor.callLater(2, self._stop) + +    def _stop(self): +        """ +        Delayed stopping of worker. Called from `stop`. +        """          log.msg("Stopping worker...")          if self._lc.running:              self._lc.stop() +        else: +            logger.warning("Looping call is not running, cannot stop")          while len(self._ongoing_defers) > 0:              d = self._ongoing_defers.pop()              d.cancel() diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index c55dbb82..8b60ad8e 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -2068,12 +2068,25 @@ class MainWindow(QtGui.QMainWindow):          logger.debug('Terminating vpn')          self._backend.stop_eip(shutdown=True) +        # We need to give some time to the ongoing signals for shutdown +        # to come into action. This needs to be solved using +        # back-communication from backend. +        QtCore.QTimer.singleShot(3000, self._shutdown) + +    def _shutdown(self): +        """ +        Actually shutdown. +        """          self._cancel_ongoing_defers()          # TODO missing any more cancels?          logger.debug('Cleaning pidfiles')          self._cleanup_pidfiles() +        if self._quit_callback: +            self._quit_callback() + +        logger.debug('Bye.')      def quit(self):          """ @@ -2109,8 +2122,3 @@ class MainWindow(QtGui.QMainWindow):              self._logger_window.close()          self.close() - -        if self._quit_callback: -            self._quit_callback() - -        logger.debug('Bye.') | 
