X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=blobdiff_plain;f=python%2Fashd%2Fserve.py;h=3de58616800d155a17ef8e0acadf58edf4d07456;hp=0197d47daf08f3d469b3b450a91641aadc094248;hb=6e8b9b9d6d043ecbcaeb8ef807bd9648424aedd7;hpb=5c6e20a6cda40337414bb886ae7f0734085b7408 diff --git a/python/ashd/serve.py b/python/ashd/serve.py index 0197d47..3de5861 100644 --- a/python/ashd/serve.py +++ b/python/ashd/serve.py @@ -75,8 +75,10 @@ class handler(object): def handle(self, request): raise Exception() def ckflush(self, req): + p = select.poll() + p.register(req, select.POLLOUT) while len(req.buffer) > 0: - rls, wls, els = select.select([], [req], [req]) + p.poll() req.flush() def close(self): pass @@ -142,8 +144,9 @@ 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: + while not th.registered: self.tcond.wait() def run(self, req): @@ -151,6 +154,7 @@ class freethread(handler): th = threading.current_thread() with self.lk: self.current.add(th) + th.registered = True self.tcond.notify_all() try: env = req.mkenv() @@ -212,8 +216,9 @@ 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: + while not th.registered: self.tcond.wait() def handle1(self, req): @@ -221,6 +226,7 @@ class resplex(handler): th = threading.current_thread() with self.lk: self.current.add(th) + th.registered = True self.tcond.notify_all() try: env = req.mkenv()