[PATCH 6/6] Handle abort messages from GMail

Ethan Glasser-Camp ethan at betacantrips.com
Thu May 19 19:02:31 UTC 2011


From: Tom Lawton <tlawton at gmx.de>

Without this patch, we try to NOOP on a bad connection and crash messily.

Signed-off-by: Tom Lawton <tlawton at gmx.de>
Signed-off-by: Ethan Glasser-Camp <ethan at betacantrips.com>
---
 offlineimap/imapserver.py |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/offlineimap/imapserver.py b/offlineimap/imapserver.py
index 889daa3..37d80f0 100644
--- a/offlineimap/imapserver.py
+++ b/offlineimap/imapserver.py
@@ -405,10 +405,18 @@ class IdleThread(object):
             if self.event.isSet():
                 return
             self.needsync = False
+            self.imapaborted = False
             def callback(args):
-                if not self.event.isSet():
-                    self.needsync = True
-                    self.event.set()
+                result, cb_arg, exc_data = args
+                if exc_data is None:
+                    if not self.event.isSet():
+                        self.needsync = True
+                        self.event.set()
+                else:
+                    # We got an "abort" signal.
+                    self.imapaborted = True
+                    self.stop()
+
             imapobj = self.parent.acquireconnection()
             imapobj.select(self.folder)
             if "IDLE" in imapobj.capabilities:
@@ -420,7 +428,11 @@ class IdleThread(object):
                 imapobj.noop()
             self.event.wait()
             if self.event.isSet():
-                imapobj.noop()
+                # Can't NOOP on a bad connection.
+                if not self.imapaborted:
+                    imapobj.noop()
+                    # We don't do event.clear() so that we'll fall out
+                    # of the loop next time around.
             self.parent.releaseconnection(imapobj)
             if self.needsync:
                 self.event.clear()
-- 
1.7.4.1




More information about the OfflineIMAP-project mailing list