diff options
| -rw-r--r-- | mail/src/leap/mail/imap/mailbox.py | 3 | ||||
| -rw-r--r-- | mail/src/leap/mail/imap/memorystore.py | 21 | 
2 files changed, 24 insertions, 0 deletions
| diff --git a/mail/src/leap/mail/imap/mailbox.py b/mail/src/leap/mail/imap/mailbox.py index 7083316..087780f 100644 --- a/mail/src/leap/mail/imap/mailbox.py +++ b/mail/src/leap/mail/imap/mailbox.py @@ -157,6 +157,9 @@ class SoledadMailbox(WithMsgFields, MBoxParser):          from twisted.internet import reactor          self.reactor = reactor +        # purge memstore from empty fdocs. +        self._memstore.purge_fdoc_store(mbox) +      @property      def listeners(self):          """ diff --git a/mail/src/leap/mail/imap/memorystore.py b/mail/src/leap/mail/imap/memorystore.py index 423b891..4aaee75 100644 --- a/mail/src/leap/mail/imap/memorystore.py +++ b/mail/src/leap/mail/imap/memorystore.py @@ -362,6 +362,27 @@ class MemoryStore(object):          self._sizes[key] = size.get_size(self._fdoc_store[key])          # TODO add hdoc and cdocs sizes too +    def purge_fdoc_store(self, mbox): +        """ +        Purge the empty documents from a fdoc store. +        Called during initialization of the SoledadMailbox + +        :param mbox: the mailbox +        :type mbox: str or unicode +        """ +        # XXX This is really a workaround until I find the conditions +        # that are making the empty items remain there. +        # This happens, for instance, after running several times +        # the regression test, that issues a store deleted + expunge + select +        # The items are being correclty deleted, but in succesive appends +        # the empty items with previously deleted uids reappear as empty +        # documents. I suspect it's a timing condition with a previously +        # evaluated sequence being used after the items has been removed. + +        for uid, value in self._fdoc_store[mbox].items(): +            if empty(value): +                del self._fdoc_store[mbox][uid] +      def get_docid_for_fdoc(self, mbox, uid):          """          Return Soledad document id for the flags-doc for a given mbox and uid, | 
