From: Fredrik Tolf Date: Mon, 9 Jan 2017 05:58:37 +0000 (+0100) Subject: python3: Fixed some threadpool handler bugs. X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=commitdiff_plain;h=7aed82e3ad447ee4deb85959212f8d027cab03e5 python3: Fixed some threadpool handler bugs. --- diff --git a/python3/ashd/serve.py b/python3/ashd/serve.py index e156cd6..87f60a0 100644 --- a/python3/ashd/serve.py +++ b/python3/ashd/serve.py @@ -207,7 +207,8 @@ class threadpool(handler): self.waitlimit = 5 self.wlstart = 0.0 self.qlk = threading.Lock() - self.qcond = threading.Condition(self.qlk) + self.qfcond = threading.Condition(self.qlk) + self.qecond = threading.Condition(self.qlk) self.max = max self.qsz = qsz self.timeout = timeout @@ -229,15 +230,15 @@ class threadpool(handler): if self.timeout is not None: now = start = time.time() while len(self.queue) >= self.qsz: - self.qcond.wait(start + self.timeout - now) + self.qecond.wait(start + self.timeout - now) now = time.time() if now - start > self.timeout: os.abort() else: - while len(self.current) >= self.qsz: - self.qcond.wait() + while len(self.queue) >= self.qsz: + self.qecond.wait() self.queue.append(req) - self.qcond.notify() + self.qfcond.notify() if len(self.waiting) < 1: spawn = True if spawn: @@ -283,13 +284,14 @@ class threadpool(handler): try: if len(self.waiting) == self.waitlimit: self.wlstart = now - self.qcond.wait(start + timeout - now) + self.qfcond.wait(start + timeout - now) finally: self.waiting.remove(th) now = time.time() if now - start > timeout: return req = self.queue.popleft() + self.qecond.notify() try: self.handle1(req) finally: