[PATCH] Drop all connections when a sync failed

Sebastian Spaeth Sebastian at SSpaeth.de
Wed Apr 27 10:44:24 BST 2011


in accounts.sync() we would holdordropconnections() after each sync. But
depending on the repository configuration that might imply that
offlineimap tries to keep the same connections. But when a sync failed,
e.g. after a user had his computer suspended, it might be that our
connections that we have are worthless. So definitely drop them after a
failed sync.

Signed-off-by: Sebastian Spaeth <Sebastian at SSpaeth.de>
---
As the user reported that a gmail account failed up to 3 refresh times
after a suspend (which would correspond to our lifetime of a connection
that we try to keep open between syncs), I suspect that we never
definitely close/drop connections after a sync failed. This patch should
help with that by definitely dropping all connections when a sync raises
an Exception.

 offlineimap/accounts.py |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/offlineimap/accounts.py b/offlineimap/accounts.py
index 7edfa37..1867b07 100644
--- a/offlineimap/accounts.py
+++ b/offlineimap/accounts.py
@@ -265,7 +265,14 @@ class SyncableAccount(Account):
             mbnames.write()
             localrepos.forgetfolders()
             remoterepos.forgetfolders()
-        finally:
+        except:
+            #error while syncing. Drop all connections that we have, they
+            #might be bogus by now (e.g. after suspend)
+            localrepos.dropconnections()
+            remoterepos.dropconnections()
+            raise
+        else:
+            # sync went fine. Hold or drop depending on config
             localrepos.holdordropconnections()
             remoterepos.holdordropconnections()
 
-- 
1.7.4.1





More information about the OfflineIMAP-project mailing list