You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2004/10/14 10:14:47 UTC

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/servlets CGIServlet.java

remm        2004/10/14 01:14:47

  Modified:    catalina/src/share/org/apache/catalina/servlets
                        CGIServlet.java
  Log:
  - Workaround for client socket exceptions occurring while running a CGI, which could cause the external process to hang.
  - Please test this (I didn't).
  
  Revision  Changes    Path
  1.27      +20 -11    jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java
  
  Index: CGIServlet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- CGIServlet.java	28 Sep 2004 22:13:31 -0000	1.26
  +++ CGIServlet.java	14 Oct 2004 08:14:47 -0000	1.27
  @@ -1806,13 +1806,22 @@
                               (new InputStreamReader(proc.getInputStream()));
   
                           char[] cBuf = new char[1024];
  -                        while ((bufRead = commandsStdOut.read(cBuf)) != -1) {
  -                            if (servletContainerStdout != null) {
  -                                if (debug >= 4) {
  -                                    log("runCGI: write(\"" +
  -                                        new String(cBuf, 0, bufRead) + "\")");
  +                        try {
  +                            while ((bufRead = commandsStdOut.read(cBuf)) != -1) {
  +                                if (servletContainerStdout != null) {
  +                                    if (debug >= 4) {
  +                                        log("runCGI: write(\"" +
  +                                                new String(cBuf, 0, bufRead) + "\")");
  +                                    }
  +                                    servletContainerStdout.write(cBuf, 0, bufRead);
                                   }
  -                                servletContainerStdout.write(cBuf, 0, bufRead);
  +                            }
  +                        } finally {
  +                            // Attempt to consume any leftover byte if something bad happens,
  +                            // such as a socket disconnect on the servlet side; otherwise, the
  +                            // external process could hang
  +                            if (bufRead != -1) {
  +                                while ((bufRead = commandsStdOut.read(cBuf)) != -1) {}
                               }
                           }
       
  
  
  

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