summaryrefslogtreecommitdiff
path: root/src/leap/mail/imap/memorystore.py
diff options
context:
space:
mode:
authordrebs <drebs@leap.se>2014-02-06 15:46:01 -0200
committerdrebs <drebs@leap.se>2014-02-06 16:58:10 -0200
commit362aaec0897261973e58b4282f5c054985d1f113 (patch)
treeea059287fdd75432a3b36ad5ef35b61755992215 /src/leap/mail/imap/memorystore.py
parentb887115370795f514c66bdc9c034acd3fb3c4376 (diff)
Flush IMAP data to disk when stopping. Closes #5095.
Diffstat (limited to 'src/leap/mail/imap/memorystore.py')
-rw-r--r--src/leap/mail/imap/memorystore.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/leap/mail/imap/memorystore.py b/src/leap/mail/imap/memorystore.py
index 9c7973d..3eba59a 100644
--- a/src/leap/mail/imap/memorystore.py
+++ b/src/leap/mail/imap/memorystore.py
@@ -875,6 +875,15 @@ class MemoryStore(object):
self.remove_message(mbox, uid)
return mem_deleted
+ def stop_and_flush(self):
+ """
+ Stop the write loop and trigger a write to the producer.
+ """
+ self._stop_write_loop()
+ if self._permanent_store is not None:
+ self.write_messages(self._permanent_store)
+ self.producer.flush()
+
def expunge(self, mbox, observer):
"""
Remove all messages flagged \\Deleted, from the Memory Store
@@ -890,12 +899,9 @@ class MemoryStore(object):
"""
soledad_store = self._permanent_store
try:
- # 1. Stop the writing call
- self._stop_write_loop()
- # 2. Enqueue a last write.
- self.write_messages(soledad_store)
- # 3. Wait on the writebacks to finish
-
+ # Stop and trigger last write
+ self.stop_and_flush()
+ # Wait on the writebacks to finish
pending_deferreds = (self._new_deferreds.get(mbox, []) +
self._dirty_deferreds.get(mbox, []))
d1 = defer.gatherResults(pending_deferreds, consumeErrors=True)
@@ -962,6 +968,10 @@ class MemoryStore(object):
# are done (gatherResults)
return getattr(self, self.WRITING_FLAG)
+ @property
+ def permanent_store(self):
+ return self._permanent_store
+
# Memory management.
def get_size(self):