[PATCH 6/6] Handle abort messages from GMail
Ethan Glasser-Camp
ethan at betacantrips.com
Thu May 19 20:02:31 BST 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