DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12041>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12041
CGIServlet can block on input
------- Additional Comments From yair.lenga@ssmb.com 2002-08-29 13:31 -------
I'm running existing CGI script (perl/DBI), and encountered the same problem. My
current workaround is to redirect STDERR at the beginning of the script to avoid
getting into deadlock.
I applied the patch, and found the following additional issues:
+ STRERR messages should always go to the log file (following Apache
convention). It should not matter if the message if produced before, during of
after the header section (which is coming from STDOUT).
+ The patch do not support long running scripts, that do not produce output
(during database activity)
+ The patch does not work well when there are a lot of message on STDERR, but
little output on STDOUT. The CGI script is getting blocked on STDERR, while the
servlet is waiting on STDOUT (#1734).
I think that a good solution will be
A. running an extra thread to deal with STDERR, OR
B. Using Non-Blocking IO (unfortunantely, only with JDK 1.4), OR
C. Fixing the polling loop
while ( isRunning ) {
if (commandsStdErr != null && commandsStdErr.ready()) {
/* Move STDERR data */
else if (commandsStdOut != null && commandsStdOut.ready()) {
/* Deal with STDOUT data */
else {
sleep a little (0.1 sec)
}
}
/* Process Cleanup */
try {
... = proc.exitValue()}
catch ( ... ) {
/* Pause, then Kill Process if needed */
} ;
--
To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>
|