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)')