From 2a852a8f484cdaa8712d203262c26b33057143fb Mon Sep 17 00:00:00 2001 From: John Goerzen Date: Sat, 2 Aug 2008 17:04:32 -0500 Subject: [PATCH] Rework keepalive to use time.sleep() instead of event.wait() This should improve power-management abilities some more The catch is that we can't wait any longer for the kathread to terminate. We were waiting for this in some cases. This is probably not a big deal. fixes deb#434074 fixes #66 --- offlineimap/accounts.py | 14 ++++---------- offlineimap/imapserver.py | 4 ++-- offlineimap/repository/Base.py | 4 ++-- offlineimap/repository/IMAP.py | 4 +--- 4 files changed, 9 insertions(+), 17 deletions(-) diff --git a/offlineimap/accounts.py b/offlineimap/accounts.py index 8e96347..a86485d 100644 --- a/offlineimap/accounts.py +++ b/offlineimap/accounts.py @@ -83,16 +83,10 @@ class Account(CustomConfig.ConfigHelperMixin): refreshperiod = int(self.refreshperiod * 60) sleepresult = self.ui.sleep(refreshperiod) - if sleepresult == 2: - # Cancel keep-alive, but don't bother terminating threads - for item in kaobjs: - item.stopkeepalive(abrupt = 1) - return sleepresult - else: - # Cancel keep-alive and wait for thread to terminate. - for item in kaobjs: - item.stopkeepalive(abrupt = 0) - return sleepresult + # Cancel keepalive + for item in kaobjs: + item.stopkeepalive() + return sleepresult class AccountSynchronizationMixin: def syncrunner(self): diff --git a/offlineimap/imapserver.py b/offlineimap/imapserver.py index 7d99e19..4c89cca 100644 --- a/offlineimap/imapserver.py +++ b/offlineimap/imapserver.py @@ -20,7 +20,7 @@ import imaplib from offlineimap import imaplibutil, imaputil, threadutil from offlineimap.ui import UIBase from threading import * -import thread, hmac, os +import thread, hmac, os, time import base64 try: @@ -309,7 +309,7 @@ class IMAPServer: ui.debug('imap', 'keepalive thread started') while 1: ui.debug('imap', 'keepalive: top of loop') - event.wait(timeout) + time.sleep(timeout) ui.debug('imap', 'keepalive: after wait') if event.isSet(): ui.debug('imap', 'keepalive: event is set; exiting') diff --git a/offlineimap/repository/Base.py b/offlineimap/repository/Base.py index ed07b57..ea1fd50 100644 --- a/offlineimap/repository/Base.py +++ b/offlineimap/repository/Base.py @@ -171,8 +171,8 @@ class BaseRepository(CustomConfig.ConfigHelperMixin): """The default implementation will do nothing.""" pass - def stopkeepalive(self, abrupt = 0): - """Stop keep alive. If abrupt is 1, stop it but don't bother waiting + def stopkeepalive(self): + """Stop keep alive, but don't bother waiting for the threads to terminate.""" pass diff --git a/offlineimap/repository/IMAP.py b/offlineimap/repository/IMAP.py index e5be9ee..8c5f469 100644 --- a/offlineimap/repository/IMAP.py +++ b/offlineimap/repository/IMAP.py @@ -57,14 +57,12 @@ class IMAPRepository(BaseRepository): self.kathread.setDaemon(1) self.kathread.start() - def stopkeepalive(self, abrupt = 0): + def stopkeepalive(self): if not hasattr(self, 'kaevent'): # Keepalive is not active. return self.kaevent.set() - if not abrupt: - self.kathread.join() del self.kathread del self.kaevent