X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=blobdiff_plain;f=python%2Fashd%2Fserve.py;h=e9f92b0467cf1e44ed635316e94bff793270dc05;hp=a025cee4de1e6342ccb5718383b38d037aea0919;hb=76ff6c4dcf0bed028475ef646f4d637d8e91d1a7;hpb=9c38d6e8568186c47103a9980235595b1962c081 diff --git a/python/ashd/serve.py b/python/ashd/serve.py index a025cee..e9f92b0 100644 --- a/python/ashd/serve.py +++ b/python/ashd/serve.py @@ -142,15 +142,17 @@ class freethread(handler): while len(self.current) >= self.max: self.tcond.wait() th = reqthread(target=self.run, args=[req]) + th.registered = False th.start() - while th.is_alive() and th not in self.current: - self.tcond.wait(1) + while not th.registered: + self.tcond.wait() def run(self, req): try: th = threading.current_thread() with self.lk: self.current.add(th) + th.registered = True self.tcond.notify_all() try: env = req.mkenv() @@ -212,15 +214,17 @@ class resplex(handler): while len(self.current) >= self.max: self.tcond.wait() th = reqthread(target=self.handle1, args=[req]) + th.registered = False th.start() - while th.is_alive() and th not in self.current: - self.tcond.wait(1) + while not th.registered: + self.tcond.wait() def handle1(self, req): try: th = threading.current_thread() with self.lk: self.current.add(th) + th.registered = True self.tcond.notify_all() try: env = req.mkenv()