> -----Original Message----- > From: Rüdiger Plüm [mailto:[EMAIL PROTECTED] > Sent: Tuesday, October 12, 2004 2:45 PM > To: [EMAIL PROTECTED] > Subject: Re: Bug: Apache hangs if script invokes fork/waitpid > > [..cut..] > > I think 1. is the "problem" in our case. If you do a fork in > your perl script you simply create another Apache process > where your forked perl script is running inside. After the > forked part of the script has finished its job mod_perl will > be left and the Apache process will continue doing its normal > "designed" work: Waiting for the next request.
I would prefer not to call it as "designed to work". It seems like this situation was not taken into considertaion in the design. Atleast I don't believe it was designed deliberately so that it would hang. > This behaviour should be totally independent from the MPM you use. Yes, ideally it should. I am not sure if it is the case though. > So I think mod_perl needs to provide some kind of wrapper for > the fork command that does the needed cleanups just before > the real fork is done (as other modules in Apache do that > fork processes) and that will terminate the process as soon > as the user provided perl code of this forked process is > left. So the behaviour will differ from the normal mod_perl > behaviour (giving control back to the Apache process / thread). > It is not a mod_perl specific problem. It is a problem with any module like mod_perl. That is a script executed by this module can invoke fork(). You see it is not appropriate to handle this situation in mod_perl. For the following reasons: - mod_perl doesn't really know that the scipt called mod_perl. It hands off the script to Perl to interpret and execute. So it is Perl who is acutally calling fork()...not mod_perl - This means mod_perl needs to know too much about the Apache's internal working. As to whether it should call pthread_exit() or exit() is dependent on the MPM. - Secondly mod_perl's decision to terminate could be premature.... it doesn't give apache any chance to perform any clean ups and other things(if needed). - In general the decision to exit a proram should not be buried deep in a function call stack. This decision should be pushde out the highest level possible ... ideally main(). -Roshan