diff options
author | ael-code <tommy.ael@gmail.com> | 2016-11-11 13:12:20 +0100 |
---|---|---|
committer | nfnty <git@nfnty.se> | 2017-01-29 23:16:30 +0100 |
commit | 62a77e71426ce4e08e410e065ef8789e8dfa6ee8 (patch) | |
tree | 8eed4b2bdd04fc2561d6b8d671c3734fd66aa849 /ranger/ext/vcs | |
parent | ad51cca4893b214d9428248572f7d0b518c9a285 (diff) | |
download | ranger-62a77e71426ce4e08e410e065ef8789e8dfa6ee8.tar.gz |
core.main: Refactor exit handling
Decrease complexity Do not ignore system exit exceptions Properly destroy UI
Diffstat (limited to 'ranger/ext/vcs')
-rw-r--r-- | ranger/ext/vcs/vcs.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/ranger/ext/vcs/vcs.py b/ranger/ext/vcs/vcs.py index 00f51152..fa5c04c0 100644 --- a/ranger/ext/vcs/vcs.py +++ b/ranger/ext/vcs/vcs.py @@ -374,13 +374,14 @@ class VcsThread(threading.Thread): # pylint: disable=too-many-instance-attribut def __init__(self, ui): super(VcsThread, self).__init__() self.daemon = True - self.ui = ui # pylint: disable=invalid-name + self.ui = ui self.queue = queue.Queue() + self._stop = threading.Event() + self.stopped = threading.Event() self.advance = threading.Event() self.advance.set() self.paused = threading.Event() self.awoken = threading.Event() - self.timestamp = time.time() self.redraw = False self.roots = set() @@ -454,10 +455,13 @@ class VcsThread(threading.Thread): # pylint: disable=too-many-instance-attribut self.paused.set() self.advance.wait() self.awoken.wait() + if self._stop.isSet(): + self.stopped.set() + return if not self.advance.isSet(): continue - self.paused.clear() self.awoken.clear() + self.paused.clear() try: self._queue_process() @@ -472,6 +476,14 @@ class VcsThread(threading.Thread): # pylint: disable=too-many-instance-attribut except Exception as ex: # pylint: disable=broad-except self.ui.fm.notify('VCS Exception: View log for more info', bad=True, exception=ex) + def stop(self): + """Stop thread synchronously""" + self._stop.set() + self.paused.wait() + self.advance.set() + self.awoken.set() + self.stopped.wait() + def pause(self): """Pause thread""" self.advance.clear() |