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]