Issue 2550596
Created on 2009-10-31 15:02 by whunger, last changed 2010-02-02 05:00 by richard.
Messages | |||
---|---|---|---|
msg3900 | Author: [hidden] (whunger) | Date: 2009-10-31 15:02 | |
When using roundup_server.py with multithreading on MS Windows, HTTP connections break occasionally, especially when there are many concurrent requests. Exceptions look like this: 192.168.0.133 - - [08/Oct/2009 09:14:26] "POST /tracker/issue19977 HTTP/1.1" 400 - EXCEPTION AT Thu Oct 08 09:14:26 2009 Traceback (most recent call last): File "C:\Programme\Python25\Lib\site-packages\roundup\scripts\roundup_server.py", line 108, in run_cgi self.inner_run_cgi() File "C:\Programme\Python25\Lib\site-packages\roundup\scripts\roundup_server.py", line 284, in inner_run_cgi c = tracker.Client(tracker, self, env) File "C:\Programme\Python25\lib\site-packages\roundup\cgi\client.py", line 186, in __init__ self.form = cgi.FieldStorage(environ=env) File "C:\Programme\Python25\lib\cgi.py", line 534, in __init__ self.read_multi(environ, keep_blank_values, strict_parsing) File "C:\Programme\Python25\lib\cgi.py", line 654, in read_multi environ, keep_blank_values, strict_parsing) File "C:\Programme\Python25\lib\cgi.py", line 536, in __init__ self.read_single() File "C:\Programme\Python25\lib\cgi.py", line 669, in read_single self.read_lines() File "C:\Programme\Python25\lib\cgi.py", line 691, in read_lines self.read_lines_to_outerboundary() File "C:\Programme\Python25\lib\cgi.py", line 719, in read_lines_to_outerboundary line = self.fp.readline(1<<16) File "C:\Programme\Python25\lib\socket.py", line 373, in readline data = self._sock.recv(self._rbufsize) AttributeError: 'NoneType' object has no attribute 'recv' The problem is in the modification of sys.stdin to make the POST data available to the request handler, as this is not thread-safe. Luckily, the fix is easy: Index: C:/Daten/Projekte/roundup/instances/int1-site-packages-roundup/scripts/roundup_server.py =================================================================== --- C:/Daten/Projekte/roundup/instances/int1-site-packages-roundup/scripts/roundup_server.py (revision 1039) +++ C:/Daten/Projekte/roundup/instances/int1-site-packages-roundup/scripts/roundup_server.py (revision 1046) @@ -102,8 +102,6 @@ """ Execute the CGI command. Wrap an innner call in an error handler so all errors can be caught. """ - save_stdin = sys.stdin - sys.stdin = self.rfile try: self.inner_run_cgi() except client.NotFound: @@ -140,7 +138,6 @@ # out to the logfile print 'EXCEPTION AT', ts traceback.print_exc() - sys.stdin = save_stdin do_GET = do_POST = do_HEAD = run_cgi Index: C:/Daten/Projekte/roundup/instances/int1-site-packages-roundup/cgi/client.py =================================================================== --- C:/Daten/Projekte/roundup/instances/int1-site-packages-roundup/cgi/client.py (revision 1039) +++ C:/Daten/Projekte/roundup/instances/int1-site-packages-roundup/cgi/client.py (revision 1046) @@ -183,7 +183,7 @@ # see if we need to re-parse the environment for the form (eg Zope) if form is None: - self.form = cgi.FieldStorage(environ=env) + self.form = cgi.FieldStorage(fp=request.rfile, environ=env) else: self.form = form Best regards - Werner Hunger. |
|||
msg4009 | Author: [hidden] (richard) | Date: 2010-02-02 05:00 | |
Thanks, patched in r4448 |
History | |||
---|---|---|---|
Date | User | Action | Args |
2010-02-02 05:00:53 | richard | set | status: new -> closed nosy: + richard messages: + msg4009 |
2009-10-31 15:02:57 | whunger | create |