]> code.delx.au - offlineimap/blobdiff - offlineimap/threadutil.py
Implementation of IMAP IDLE
[offlineimap] / offlineimap / threadutil.py
index f1df5b2d84351596eccda09ba4247d9e3b837276..b516f68671b95be9e850794e2207a00822c686a9 100644 (file)
@@ -114,10 +114,7 @@ def exitnotifymonitorloop(callback):
     while 1:                            # Loop forever.
         try:
             thrd = exitthreads.get(False)
-            print "exitnotifymonitorloop: Got thread\n"
             callback(thrd)
-            print "exitnotifymonitorloop: callback done\n"
-            exitthreads.task_done()
         except Empty:
             time.sleep(1)
 
@@ -162,16 +159,18 @@ class ExitNotifyThread(Thread):
                             self.getName() + ".prof")
         except:
             self.setExitCause('EXCEPTION')
-            self.setExitException(sys.exc_info()[1])
-            sbuf = StringIO()
-            traceback.print_exc(file = sbuf)
-            self.setExitStackTrace(sbuf.getvalue())
+            if sys:
+                self.setExitException(sys.exc_info()[1])
+                sbuf = StringIO()
+                traceback.print_exc(file = sbuf)
+                self.setExitStackTrace(sbuf.getvalue())
         else:
             self.setExitCause('NORMAL')
         if not hasattr(self, 'exitmessage'):
             self.setExitMessage(None)
 
-        exitthreads.put(self, True)
+        if exitthreads:
+            exitthreads.put(self, True)
 
     def setExitCause(self, cause):
         self.exitcause = cause
@@ -233,7 +232,8 @@ class InstanceLimitedThread(ExitNotifyThread):
         try:
             ExitNotifyThread.run(self)
         finally:
-            instancelimitedsems[self.instancename].release()
+            if instancelimitedsems and instancelimitedsems[self.instancename]:
+                instancelimitedsems[self.instancename].release()
         
     
 ######################################################################