Merge pull request #1031 from jhekkanen/1030-fix

Fix self.nr usage in ThreadedWorker so that auto restart works as expected
This commit is contained in:
Benoit Chesneau 2015-05-20 12:56:22 +02:00
commit 3a2c437902

View File

@ -92,6 +92,7 @@ class ThreadWorker(base.Worker):
self._lock = None self._lock = None
self.futures = deque() self.futures = deque()
self._keep = deque() self._keep = deque()
self.nr_conns = 0
@classmethod @classmethod
def check_config(cls, cfg, log): def check_config(cls, cfg, log):
@ -131,7 +132,7 @@ class ThreadWorker(base.Worker):
client, addr = listener.accept() client, addr = listener.accept()
# initialize the connection object # initialize the connection object
conn = TConn(self.cfg, listener, client, addr) conn = TConn(self.cfg, listener, client, addr)
self.nr += 1 self.nr_conns += 1
# enqueue the job # enqueue the job
self.enqueue_req(conn) self.enqueue_req(conn)
except socket.error as e: except socket.error as e:
@ -170,7 +171,7 @@ class ThreadWorker(base.Worker):
self._keep.appendleft(conn) self._keep.appendleft(conn)
break break
else: else:
self.nr -= 1 self.nr_conns -= 1
# remove the socket from the poller # remove the socket from the poller
with self._lock: with self._lock:
try: try:
@ -202,7 +203,7 @@ class ThreadWorker(base.Worker):
self.notify() self.notify()
# can we accept more connections? # can we accept more connections?
if self.nr < self.worker_connections: if self.nr_conns < self.worker_connections:
# wait for an event # wait for an event
events = self.poller.select(0.02) events = self.poller.select(0.02)
for key, mask in events: for key, mask in events:
@ -253,12 +254,12 @@ class ThreadWorker(base.Worker):
self.poller.register(conn.sock, selectors.EVENT_READ, self.poller.register(conn.sock, selectors.EVENT_READ,
partial(self.reuse_connection, conn)) partial(self.reuse_connection, conn))
else: else:
self.nr -= 1 self.nr_conns -= 1
conn.close() conn.close()
except: except:
# an exception happened, make sure to close the # an exception happened, make sure to close the
# socket. # socket.
self.nr -= 1 self.nr_conns -= 1
fs.conn.close() fs.conn.close()
def handle(self, conn): def handle(self, conn):
@ -308,7 +309,7 @@ class ThreadWorker(base.Worker):
resp, environ = wsgi.create(req, conn.sock, conn.addr, resp, environ = wsgi.create(req, conn.sock, conn.addr,
conn.listener.getsockname(), self.cfg) conn.listener.getsockname(), self.cfg)
environ["wsgi.multithread"] = True environ["wsgi.multithread"] = True
self.nr += 1
if self.alive and self.nr >= self.max_requests: if self.alive and self.nr >= self.max_requests:
self.log.info("Autorestarting worker after current request.") self.log.info("Autorestarting worker after current request.")
resp.force_close() resp.force_close()