Hi!

  I've found a problem in CGI module (servlets-cgi.jar) in Tomcat distribution.
  The problem occures in some occasions that are hard to reproduce. 
  We have Tomcat that invokes some CGI (webmail) on Linux (Debian).
  Everthings worked fine, but
  after few days we discoverd lots of cgi programms that are hanged in WRITE mode.
  So after a week, we needed fast restart of Tomcat (OutOfMemoryError -> hanging 
  forked proceses).

  Problem was detected in next few line (thread that reads from forked process and
  wirites data to client). In few occasions we catched this exception:
   java.net.SocketExcpetion: ClientAbortException (in code below)
  and our forked process didn't finish
  his work and remained hanging (in write mode ), but sometimes we got this exception:
   java.net.SocketException: Broken pipe (in catalina.out) and forked process finished 
  his work as supposed.
  Both exceptions are thrown wheb client closes his/her browser before anthing appears.
  First excpetion is very hard to reproduce (try it :-).

  The solution is to add try-catch block in while loop. With this modification, any
  forked process will finish his work and be able to write the complete content 
  (somewhere).

  while ((bufRead = commandsStdOut.read(cBuf)) != -1) {
   if (servletContainerStdout != null) {
      if (debug >= 4) {
         log("runCGI: write(\"" + new String(cBuf, 0, bufRead) + "\")");
      }

      /////////////////////////////
      // new code

      try {
        servletContainerStdout.write(cBuf, 0, bufRead); // old line
      } catch (java.net.SocketException se {
      servletContainerStdout = null;

      // end of new code
      ////////////////////////

   }
  }

              kresimir

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to