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]