On Thu, Mar 29, 2007 at 02:49:36PM -0500, Frank Wiles wrote: > On Thu, 29 Mar 2007 10:12:00 +0100 > Stephane Chazelas <[EMAIL PROTECTED]> wrote: > > > On Wed, Mar 28, 2007 at 11:46:15AM +0100, Stephane Chazelas wrote: > > > 1. Problem Description: > > > > > > Hiya, > > > > > > After querying a mod_perl run CGI, the corresponding apache2 > > > process ends up having its fd 0 and/or fd 1 closed. This then > > > causes some other CGIs (for instance mod_python's viewvc) to > > > fail because they are not robust enough to cope with a closed > > > fd 0. > > > > I should add that this is how mod_perl is told to run the CGI > > script: > > > > <IfModule mod_perl.c> > > <Location /cgi-bin/gnatsweb.pl> > > SetHandler perl-script > > PerlResponseHandler ModPerl::PerlRunPrefork > > PerlOptions +ParseHeaders > > </Location> > > </IfModule> > > > > I disabled mod_perl for now. But could anyone please indicate > > whether I'm not using it properly or whether it is indeed a bug > > or whether that version of Apache is not supported? > > Hi Stephane, > > This isn't a bug, but a normal aspect of mod_perl. You can however > re-tie them. I think this page gives you all the info you need: > > > http://perl.apache.org/docs/1.0/guide/porting.html#STDIN__STDOUT_and_STDERR_streams [...]
Hi Frank, the problem I'm talking about is not that the CGI's STDIN/STDOUT is reaffected. IT's normal for a normal CGI operation, it's that the fds 0 and 1 are not restored when modperl returns, so that other handlers run afterwards by the same Apache process (here my problem was with mod_python) get messed up. And if you look carefully at the traces, even for the CGI, maybe perl's STDIN/STDOUT /handles/ were reaffected, but they were not affected fds 0 and 1, it was not a dup, the CGI's print STDOUT "..."; actually did a write(16, "..."), so STDOUT was affected another fd that 1. Tomorrow, I'll try doing a system() within perl, but I suspect for instance system("echo foo") will no output anything to the socket. Cheers, Stephane