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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to