From 1bb3980fc3fd4d82bdd826d571b36e0dc4aef310 Mon Sep 17 00:00:00 2001 From: Gareth Parker Date: Fri, 5 Jul 2019 17:04:06 +0100 Subject: [PATCH] Changing the timer into Daemon mode so that Python can exit from it --- python3/vdebug/session.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/python3/vdebug/session.py b/python3/vdebug/session.py index c12188da..c9204e8d 100644 --- a/python3/vdebug/session.py +++ b/python3/vdebug/session.py @@ -20,6 +20,7 @@ def __init__(self, ui, breakpoints): self.__ex_handler = util.ExceptionHandler(self) self.__session = None self.listener = None + self.__heartbeat_timer = None def dispatch_event(self, name, *args): event.Dispatcher(self).dispatch_event(name, *args) @@ -43,6 +44,9 @@ def listen(self): self.start_listener() def heartbeat(self): + if not self.is_connected(): + return + try: res = self.session().api().status() @@ -50,7 +54,9 @@ def heartbeat(self): self.dispatch_event("refresh", res) return - threading.Timer(2.0, self.heartbeat).start() + self.__heartbeat_timer = threading.Timer(2.0, self.heartbeat) + self.__heartbeat_timer.daemon = True + self.__heartbeat_timer.start() except: self.dispatch_event("refresh", "stopped") @@ -78,6 +84,8 @@ def run(self): self.listen() def stop(self): + if self.__heartbeat_timer is not None: + self.__heartbeat_timer.cancel() if self.is_connected(): self.__session.close_connection() elif self.is_listening(): @@ -88,6 +96,8 @@ def stop(self): self.__ui.say("Vdebug is not running") def close(self): + if self.__heartbeat_timer is not None: + self.__heartbeat_timer.cancel() self.stop_listening() if self.is_connected(): self.__session.close_connection() @@ -131,7 +141,10 @@ def __new_session(self): status = self.__session.start(self.listener.create_connection()) log.Log("refresh event", log.Logger.DEBUG) self.dispatch_event("refresh", status) - threading.Timer(2.0, self.heartbeat).start() + + self.__heartbeat_timer = threading.Timer(2.0, self.heartbeat) + self.__heartbeat_timer.daemon = True + self.__heartbeat_timer.start() class Session: