|
|
Choosing A Webhost: |
Re: [5.8.1] getppid is not maintained if not forked by perl: msg#00239apache.mod-perl.devel
Rafael Garcia-Suarez wrote: Stas Bekman wrote: Yes, but we aren't talking threads here. This behavior is true under mp2/prefork mpm where we have no threads, but processes. We run in the threads-friendly environment, so you can spawn threads if you want to (e.g. if you want to use more than one perl interpreter under the same process). >So if an application running embedded perl wasn't forked by perl's pp_fork, it'll have this problem. Under mod_perl 2, we get getppid reporting 1 from the forked process, when pstree clearly shows that this is not the case. I have a workaround for mp2: I don't think this should be a responsibility of the application, it's quite possible that that the application embedding perl has no callback/event to know when to call this special initialization. I think the really proper algorithm is to leave the current behavior only if perl was the one who did the fork (which will probably require yet another PL_ flag. And if that flag is not set the pp_getppid logic should be changed to cache that value and raise that flag. Something like this: PP(pp_fork) { ... #ifdef THREADS_HAVE_PIDS PL_ppid = (IV)getppid(); PL_ppid_cached = 1; #endif PP(pp_getppid) { ... { #ifdef HAS_GETPPID dSP; dTARGET; # ifdef THREADS_HAVE_PIDS if (!PL_ppid_cached) { PL_ppid = (IV)getppid(); PL_ppid_cached = 1; } XPUSHi( PL_ppid ); # else XPUSHi( getppid() ); # endif RETURN; #else DIE(aTHX_ PL_no_func, "getppid"); #endif } of course needing to init PL_ppid_cached to 0 when created and make sure that threads init it to 0 as well, I suppose. this is untested, just an idea. Or maybe initting PL_ppid to 0, can serve the same purpose as the newly suggested flag PL_ppid_cached. So the logic would be then: PP(pp_getppid) { ... { #ifdef HAS_GETPPID dSP; dTARGET; # ifdef THREADS_HAVE_PIDS if (!PL_ppid) { PL_ppid = (IV)getppid(); } XPUSHi( PL_ppid ); # else ... without any changes to pp_fork Perhaps should I add a note in perlembed.pod about this problem ? First of all, do you think this change (if left unmodified) is suitable for a maintenance release? __________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:stas@xxxxxxxxxx http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: [PATCH] add PERL5LIB to @INC in the correct order, Geoffrey Young |
|---|---|
| Next by Date: | Re: [5.8.1] getppid is not maintained if not forked by perl, Geoffrey Young |
| Previous by Thread: | Re: [5.8.1] getppid is not maintained if not forked by perl, Rafael Garcia-Suarez |
| Next by Thread: | Re: [5.8.1] getppid is not maintained if not forked by perl, Rafael Garcia-Suarez |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
Free MagazinesCisco NewsReceive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business. subscribe Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field. subscribe The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business. subscribe Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company. subscribe Total Telecom Total Telecom is "The Economist of the communications industry". subscribe |