<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>Ah, so it seems that, as I leave the server running longer & longer,</div>
<div>more & more threads are taken up with a `.recv()` call. I think one of</div>
<div>my clients opens requests and does not read them/close them. Eventually</div><div>all the threads are blocking in that fashion. </div><div><br></div><div>I will fix my clients. But, is there a server-side fix to this (again, using Repoze.BFG)?</div>
<div>Something to time out the connection after 60 seconds or so if nothing has happened?</div></div></blockquote><div><br></div><div>Additional info: in particular the blocked threads' stack dumps look like this:</div>
<div><br></div><div><div>Thread 140605868680960:</div><div> File "/usr/lib/python2.6/threading.py", line 504, in __bootstrap</div><div> self.__bootstrap_inner()</div><div> File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner</div>
<div> self.run()</div><div> File "/usr/lib/python2.6/threading.py", line 484, in run</div><div> self.__target(*self.__args, **self.__kwargs)</div><div> File "/home/tsa/env/lib/python2.6/site-packages/paste/httpserver.py", line 878, in worker_thread_callback</div>
<div> runnable()</div><div> File "/home/tsa/env/lib/python2.6/site-packages/paste/httpserver.py", line 1052, in <lambda></div><div> lambda: self.process_request_in_thread(request, client_address))</div>
<div> File "/home/tsa/env/lib/python2.6/site-packages/paste/httpserver.py", line 1068, in process_request_in_thread</div><div> self.finish_request(request, client_address)</div><div> File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request</div>
<div> self.RequestHandlerClass(request, client_address, self)</div><div> File "/usr/lib/python2.6/SocketServer.py", line 617, in __init__</div><div> self.handle()</div><div> File "/home/tsa/env/lib/python2.6/site-packages/paste/httpserver.py", line 442, in handle</div>
<div> BaseHTTPRequestHandler.handle(self)</div><div> File "/usr/lib/python2.6/BaseHTTPServer.py", line 329, in handle</div><div> self.handle_one_request()</div><div> File "/home/tsa/env/lib/python2.6/site-packages/paste/httpserver.py", line 437, in handle_one_request</div>
<div> self.wsgi_execute()</div><div> File "/home/tsa/env/lib/python2.6/site-packages/paste/httpserver.py", line 287, in wsgi_execute</div><div> self.wsgi_start_response)</div><div> File "/home/tsa/env/lib/python2.6/site-packages/repoze/zodbconn/connector.py", line 21, in __call__</div>
<div> result = self.next_app(environ, start_response)</div><div> File "/home/tsa/env/lib/python2.6/site-packages/repoze/zodbconn/cachecleanup.py", line 25, in __call__</div><div> return self.next_app(environ, start_response)</div>
<div> File "/home/tsa/env/lib/python2.6/site-packages/repoze/retry/__init__.py", line 65, in __call__</div><div> chunk = original_wsgi_input.read(rest)</div><div> File "/home/tsa/env/lib/python2.6/site-packages/paste/httpserver.py", line 474, in read</div>
<div> data = self.file.read(length)</div><div> File "/usr/lib/python2.6/socket.py", line 377, in read</div><div> data = self._sock.recv(left)</div></div><div><br></div><div>Was my assessment of the situation accurate?</div>
</div>