Author: markt
Date: Wed Jan  6 10:30:07 2010
New Revision: 896371

URL: http://svn.apache.org/viewvc?rev=896371&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48454
Give the stderr reader a chance to finish before terminating the CGI process. 
This avoids "Bad file descriptor" errors. The period to wait is configurable.
Based on a patch by Markus Grieder with review comments from Rainer

Modified:
    tomcat/tc6.0.x/trunk/   (props changed)
    tomcat/tc6.0.x/trunk/STATUS.txt
    tomcat/tc6.0.x/trunk/conf/web.xml
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java
    tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml
    tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc6.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jan  6 10:30:07 2010
@@ -1,2 +1,2 @@
 /tomcat:883362
-/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770809,77
 
0876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,8902
 
65,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493
+/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770809,77
 
0876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,8902
 
65,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894831,896370

Modified: tomcat/tc6.0.x/trunk/STATUS.txt
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=896371&r1=896370&r2=896371&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/STATUS.txt (original)
+++ tomcat/tc6.0.x/trunk/STATUS.txt Wed Jan  6 10:30:07 2010
@@ -103,19 +103,6 @@
   +1: kkolinko
   -1:
 
-* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48454
-  Give the stderr reader a chance to finish before terminating the CGI process.
-  This avoids "Bad file descriptor" errors. The period to wait is configurable.
-  Based on a patch by Markus Grieder
-  http://svn.apache.org/viewvc?rev=894580&view=rev
-  +1: markt, kkolinko, rjung
-  -1: 
-  rjung: "process?" -> "process." in the howto.
-         In web.xml, the howto and the comments, there is sometimes
-         "stderr" and sometimes "stdErr". In order to avoid confusion
-         w.r.t. the correct name of the parameter "stderrTimeout" we
-         might use "stderr" instead of "stdErr" consistently?
-
 * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48417
   Correct French translations
   Patches provided by André Warnier

Modified: tomcat/tc6.0.x/trunk/conf/web.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/conf/web.xml?rev=896371&r1=896370&r2=896371&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/conf/web.xml (original)
+++ tomcat/tc6.0.x/trunk/conf/web.xml Wed Jan  6 10:30:07 2010
@@ -322,7 +322,7 @@
   <!--   debug                Debugging detail level for messages logged    -->
   <!--                        by this servlet.  [0]                         -->
   <!--                                                                      -->
-  <!--   executable           Name of the exectuable used to run the        -->
+  <!--   executable           Name of the executable used to run the        -->
   <!--                        script. [perl]                                -->
   <!--                                                                      -->
   <!--   parameterEncoding    Name of parameter encoding to be used with    -->
@@ -331,6 +331,10 @@
   <!--                                                                      -->
   <!--   passShellEnvironment Should the shell environment variables (if    -->
   <!--                        any) be passed to the CGI script? [false]     -->
+  <!--                                                                      -->
+  <!--   stderrTimeout        The time (in milliseconds) to wait for the    -->
+  <!--                        reading of stderr to complete before          -->
+  <!--                        terminating the CGI process. [2000]           -->
 
 <!--
     <servlet>

Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java?rev=896371&r1=896370&r2=896371&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java Wed 
Jan  6 10:30:07 2010
@@ -260,8 +260,14 @@
     private String cgiExecutable = "perl";
     
     /** the encoding to use for parameters */
-    private String parameterEncoding = System.getProperty("file.encoding",
-                                                          "UTF-8");
+    private String parameterEncoding =
+        System.getProperty("file.encoding", "UTF-8");
+
+    /**
+     * The time (in milliseconds) to wait for the reading of stderr to complete
+     * before terminating the CGI process.
+     */
+    private long stderrTimeout = 2000;
 
     /** object used to ensure multiple threads don't try to expand same file */
     static Object expandFileLock = new Object();
@@ -315,6 +321,11 @@
             parameterEncoding = 
getServletConfig().getInitParameter("parameterEncoding");
         }
 
+        if (getServletConfig().getInitParameter("stderrTimeout") != null) {
+            stderrTimeout = Long.parseLong(getServletConfig().getInitParameter(
+                    "stderrTimeout"));
+        }
+
     }
 
 
@@ -1599,6 +1610,7 @@
             Runtime rt = null;
             InputStream cgiOutput = null;
             BufferedReader commandsStdErr = null;
+            Thread errReaderThread = null;
             BufferedOutputStream commandsStdIn = null;
             Process proc = null;
             int bufRead = -1;
@@ -1656,11 +1668,12 @@
                     (new InputStreamReader(proc.getErrorStream()));
                 final BufferedReader stdErrRdr = commandsStdErr ;
 
-                new Thread() {
+                errReaderThread = new Thread() {
                     public void run () {
                         sendToLog(stdErrRdr) ;
                     } ;
-                }.start() ;
+                };
+                errReaderThread.start();
 
                 InputStream cgiHeaderStream =
                     new HTTPHeaderInputStream(proc.getInputStream());
@@ -1741,6 +1754,14 @@
                         log ("Exception closing output stream " + ioe);
                     }
                 }
+                // Make sure the error stream reader has finished
+                if (errReaderThread != null) {
+                    try {
+                        errReaderThread.join(stderrTimeout);
+                    } catch (InterruptedException e) {
+                        log ("Interupted waiting for stderr reader thread");
+                    }
+                }
                 if (debug > 4) {
                     log ("Running finally block");
                 }

Modified: tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml?rev=896371&r1=896370&r2=896371&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml Wed Jan  6 10:30:07 2010
@@ -83,6 +83,9 @@
 <li><strong>passShellEnvironment</strong> - Should the shell environment
 variables (if any) be passed to the CGI script? Default is
 <code>false</code>.</li>
+<li><strong>stderrTimeout</strong> - The time (in milliseconds) to wait for
+the reading of stderr to complete before terminating the CGI process. Default
+is 2000.</li>
 </ul>
 </p>
 

Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=896371&r1=896370&r2=896371&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Wed Jan  6 10:30:07 2010
@@ -34,6 +34,14 @@
 
 <body>
 <section name="Tomcat 6.0.23 (jfclere)">
+  <subsection name="Catalina">
+    <changelog>
+      <fix>
+        <bug>48454</bug>: Ensure stderr is completely read before terminating
+        the CGI process. Patch provided by Markus Grieder. (markt)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="Other">
     <changelog>
       <fix>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to