imapserver: Make noop() more resitent against dropped connections.
Drop a connection, if the NOOP to keep a connection open fails due to broken connections. Note that I believe this function is not working as intended. We grab one random connection and send a NOOP. This is not enough to keep all connections open, and if we invoke this function multiple times, we might well always get the same connection to send a NOOP through. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
parent
e707bc530b
commit
76b0d7cf25
@ -32,3 +32,6 @@ Bug Fixes
|
||||
|
||||
* New folders on the remote would be skipped on the very sync run they
|
||||
are created and only by synced in subsequent runs. Fixed.
|
||||
|
||||
* Make NOOPs to keep a server connection open more resistant against dropped
|
||||
connections.
|
||||
|
@ -491,10 +491,24 @@ class IdleThread(object):
|
||||
self.thread.join()
|
||||
|
||||
def noop(self):
|
||||
#TODO: AFAIK this is not optimal, we will send a NOOP on one
|
||||
#random connection (ie not enough to keep all connections
|
||||
#open). In case we do the noop multiple times, we can well use
|
||||
#the same connection every time, as we get a random one. This
|
||||
#function should IMHO send a noop on ALL available connections
|
||||
#to the server.
|
||||
imapobj = self.parent.acquireconnection()
|
||||
try:
|
||||
imapobj.noop()
|
||||
self.stop_sig.wait()
|
||||
except imapobj.abort:
|
||||
self.ui.warn('Attempting NOOP on dropped connection %s' % \
|
||||
imapobj.identifier)
|
||||
self.parent.releaseconnection(imapobj, True)
|
||||
imapobj = None
|
||||
finally:
|
||||
if imapobj:
|
||||
self.parent.releaseconnection(imapobj)
|
||||
self.stop_sig.wait() # wait until we are supposed to quit
|
||||
|
||||
def dosync(self):
|
||||
remoterepos = self.parent.repos
|
||||
|
Loading…
Reference in New Issue
Block a user