diff --git a/ext_gdb/sync.py b/ext_gdb/sync.py index 01a837d..3551887 100644 --- a/ext_gdb/sync.py +++ b/ext_gdb/sync.py @@ -321,7 +321,11 @@ def run(self): if self.evt_stop.is_set(): break - self.evt_enabled.wait() + while True: + if self.evt_enabled.wait(2*TIMER_PERIOD): + break + if not self.interpreter_alive(): + return if not self.sync.tunnel: break @@ -331,6 +335,9 @@ def run(self): time.sleep(TIMER_PERIOD) + def interpreter_alive(self): + return threading.main_thread().is_alive() + def poll(self): msg = self.sync.tunnel.poll() if msg: @@ -383,11 +390,11 @@ def __init__(self, cfg, commands=[]): self.offset = None self.tunnel = None self.poller = None + gdb.events.exited.connect(self.exit_handler) gdb.events.cont.connect(self.cont_handler) gdb.events.stop.connect(self.stop_handler) gdb.events.new_objfile.connect(self.newobj_handler) - gdb.events.new_thread.connect(self.newthread_handler) for cmd in commands: cmd(self) @@ -466,9 +473,6 @@ def release_poll_timer(self): self.poller.stop() self.poller = None - def newthread_handler(self, event): - self.create_poll_timer() - def newobj_handler(self, event): # force a new capture self.maps = None @@ -521,10 +525,7 @@ def invoke(self, arg, from_tty): id = self.identity() self.tunnel.send("[notice]{\"type\":\"new_dbg\",\"msg\":\"dbg connect - %s\",\"dialect\":\"gdb\"}\n" % id) rs_log("sync is now enabled with host %s" % str(arg)) - - # make sure there is an active thread before running the Poller - if gdb.selected_thread(): - self.create_poll_timer() + self.create_poll_timer() else: print('(update)')