Fix double release of IMAP connection object
This commit fixes the case when we're invoking releaseconnection() for a given imapobj twice. This bug manifests itself as {{{ ValueError: list.remove(x): x not in list File "[...]/offlineimap/folder/IMAP.py", line 615, in savemessage self.imapserver.releaseconnection(imapobj) File "[...]/offlineimap/imapserver.py", line 130, in releaseconnection self.assignedconnections.remove(connection) }}} Signed-off-by: Eygene Ryabinkin <rea@codelabs.ru>
This commit is contained in:
parent
e3fbe0232b
commit
b01274ce38
@ -500,6 +500,11 @@ class IMAPFolder(BaseFolder):
|
|||||||
|
|
||||||
retry_left = 2 # succeeded in APPENDING?
|
retry_left = 2 # succeeded in APPENDING?
|
||||||
imapobj = self.imapserver.acquireconnection()
|
imapobj = self.imapserver.acquireconnection()
|
||||||
|
# NB: in the finally clause for this try we will release
|
||||||
|
# NB: the acquired imapobj, so don't do that twice unless
|
||||||
|
# NB: you will put another connection to imapobj. If you
|
||||||
|
# NB: really do need to release connection manually, set
|
||||||
|
# NB: imapobj to None.
|
||||||
try:
|
try:
|
||||||
while retry_left:
|
while retry_left:
|
||||||
# UIDPLUS extension provides us with an APPENDUID response.
|
# UIDPLUS extension provides us with an APPENDUID response.
|
||||||
@ -612,7 +617,7 @@ class IMAPFolder(BaseFolder):
|
|||||||
self.ui.warn('imap', "savemessage: Searching mails for new "
|
self.ui.warn('imap', "savemessage: Searching mails for new "
|
||||||
"Message-ID failed. Could not determine new UID.")
|
"Message-ID failed. Could not determine new UID.")
|
||||||
finally:
|
finally:
|
||||||
self.imapserver.releaseconnection(imapobj)
|
if imapobj: self.imapserver.releaseconnection(imapobj)
|
||||||
|
|
||||||
if uid: # avoid UID FETCH 0 crash happening later on
|
if uid: # avoid UID FETCH 0 crash happening later on
|
||||||
self.messagelist[uid] = {'uid': uid, 'flags': flags}
|
self.messagelist[uid] = {'uid': uid, 'flags': flags}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user