/head: changeset 62

Initial work on threading support
This commit is contained in:
jgoerzen
2002-07-04 01:02:10 +01:00
parent b0e5979735
commit 8df2ac0a47
6 changed files with 52 additions and 20 deletions

View File

@ -1,2 +1,2 @@
import ui, folder, repository, mbnames
import ui, folder, repository, mbnames, threadutil

View File

@ -16,7 +16,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from offlineimap import imaplib, imaputil
from offlineimap import imaplib, imaputil, threadutil
from threading import *
class UsefulIMAPMixIn:
@ -129,21 +129,17 @@ class IMAPServer:
to copy messages, then have them all wait for 3 available connections.
It's OK if we have maxconnections + 1 or 2 threads, which is what
this will help us do."""
self.semaphore.acquire()
self.semaphore.release()
threadutil.semaphorewait(self.semaphore)
def close(self):
# Make sure I own all the semaphores. Let the threads finish
# their stuff. This is a blocking method.
self.connectionlock.acquire()
for i in range(self.maxconnections):
self.semaphore.acquire()
threadutil.semaphorereset(self.semaphore, self.maxconnections)
for imapobj in self.assignedconnections + self.availableconnections:
imapobj.logout()
self.assignedconnections = []
self.availableconnections = []
for i in range(self.maxconnections):
self.semaphore.release()
self.connectionlock.release()

View File

@ -0,0 +1,29 @@
# Copyright (C) 2002 John Goerzen
# Thread support module
# <jgoerzen@complete.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from Threading import *
def semaphorewait(semaphore, originalstate):
"""Wait until the semaphore gets back to its original state -- all acquired
resources released."""
for i in range(originalstate):
semaphore.acquire()
# Now release these.
for i in range(originalstate):
semaphore.release()

View File

@ -9,9 +9,10 @@ class TTYUI(UIBase):
def _msg(s, msg):
print msg
def getpass(s, accountname, host, port, user):
def getpass(s, accountname, config):
return getpass("%s: Enter password for %s on %s: " %
(accountname, user, host))
(accountname, config.get(accountname, "remoteuser"),
config.get(accountname, "remotehost")))
def syncingmessages(s, sr, sf, dr, df):
if s.verbose:

View File

@ -36,7 +36,7 @@ class UIBase:
################################################## INPUT
def getpass(s, accountname, host, port, user):
def getpass(s, accountname, config):
raise NotImplementedException
def folderlist(s, list):