Roundup Tracker - Issues

Issue 2550596

classification
Connection breakdown with threaded server
Type: crash Severity: major
Components: Web interface Versions: 1.4, 1.3, 1.2
process
Status: closed
:
: : richard, whunger
Priority: :

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:53richardsetstatus: new -> closed
nosy: + richard
messages: + msg4009
2009-10-31 15:02:57whungercreate