You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by go...@apache.org on 2005/09/23 21:30:56 UTC

svn commit: r291193 - in /perl/modperl/trunk: Changes src/modules/perl/mod_perl.c src/modules/perl/modperl_config.c src/modules/perl/modperl_config.h src/modules/perl/modperl_module.c t/response/TestDirective/perldo.pm

Author: gozer
Date: Fri Sep 23 12:30:51 2005
New Revision: 291193

URL: http://svn.apache.org/viewcvs?rev=291193&view=rev
Log:
$0 Fixes :
- Setting $0 works on Linux again
- HP-UX and *BSDes show the correct process name instead of '-e'         

Bug-Report: http://thread.gmane.org/gmane.comp.apache.mod-perl/20847


Modified:
    perl/modperl/trunk/Changes
    perl/modperl/trunk/src/modules/perl/mod_perl.c
    perl/modperl/trunk/src/modules/perl/modperl_config.c
    perl/modperl/trunk/src/modules/perl/modperl_config.h
    perl/modperl/trunk/src/modules/perl/modperl_module.c
    perl/modperl/trunk/t/response/TestDirective/perldo.pm

Modified: perl/modperl/trunk/Changes
URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?rev=291193&r1=291192&r2=291193&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Fri Sep 23 12:30:51 2005
@@ -12,6 +12,10 @@
 
 =item 2.0.2-dev
 
+$0 Fixes : [Gozer]
+- Setting $0 works on Linux again
+- HP-UX and *BSDes show the correct process name instead of '-e'
+ 
 Fix a cirtical but trivial bug that would cause MP_MAINTAINER=1
 or MP_TRACE=1 builds to fail if not building against a threaded APR.
 Functions such as apr_os_thread_current() would not be linked in,

Modified: perl/modperl/trunk/src/modules/perl/mod_perl.c
URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/mod_perl.c?rev=291193&r1=291192&r2=291193&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/mod_perl.c (original)
+++ perl/modperl/trunk/src/modules/perl/mod_perl.c Fri Sep 23 12:30:51 2005
@@ -271,6 +271,13 @@
     PL_reentrant_buffer->_crypt_struct.current_saltbits = 0;
 #endif
 
+    /* We need to reset $0 to argv[0] (httpd) since perl_parse() will
+     * have set it to '-e'. Being magic-aware ensures that some
+     * OS-specific magic will happen (i.e. setproctitle() on *BSDs)
+     */
+    PL_origalen = strlen(argv[0]) + 1;
+    sv_setpv_mg(get_sv("0",0), argv[0]);
+
     perl_run(perl);
 
 #ifdef USE_ITHREADS

Modified: perl/modperl/trunk/src/modules/perl/modperl_config.c
URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_config.c?rev=291193&r1=291192&r2=291193&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_config.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_config.c Fri Sep 23 12:30:51 2005
@@ -147,7 +147,7 @@
     return rcfg;
 }
 
-modperl_config_srv_t *modperl_config_srv_new(apr_pool_t *p)
+modperl_config_srv_t *modperl_config_srv_new(apr_pool_t *p, server_rec *s)
 {
     modperl_config_srv_t *scfg = (modperl_config_srv_t *)
         apr_pcalloc(p, sizeof(*scfg));
@@ -173,18 +173,9 @@
     scfg->gtop = modperl_gtop_new(p);
 #endif        
 
-    /* must copy ap_server_argv0, because otherwise any read/write of
-     * $0 corrupts process' argv[0] (visible with 'ps -ef' on most
-     * unices). This is due to the logic of calculating PL_origalen in
-     * perl_parse, which is later used in set_mg.c:Perl_magic_set() to
-     * truncate the argv[0] setting. remember that argv[0] passed to
-     * perl_parse() != process's real argv[0].
-     *
-     * as a copying side-effect, changing $0 now doesn't affect the
-     * way the process is seen from the outside.
-     */
-    modperl_config_srv_argv_push(apr_pstrmemdup(p, ap_server_argv0,
-                                                strlen(ap_server_argv0)));
+    /* make sure httpd's argv[0] is the first argument so $0 is
+     * correctly connected to the real thing */
+    modperl_config_srv_argv_push(s->process->argv[0]);
 
     MP_TRACE_d(MP_FUNC, "new scfg: 0x%lx\n", (unsigned long)scfg);
 
@@ -233,7 +224,7 @@
 
 void *modperl_config_srv_create(apr_pool_t *p, server_rec *s)
 {
-    modperl_config_srv_t *scfg = modperl_config_srv_new(p);
+    modperl_config_srv_t *scfg = modperl_config_srv_new(p, s);
 
     if (!s->is_virtual) {
 
@@ -282,7 +273,7 @@
     modperl_config_srv_t
         *base = (modperl_config_srv_t *)basev,
         *add  = (modperl_config_srv_t *)addv,
-        *mrg  = modperl_config_srv_new(p);
+        *mrg  = modperl_config_srv_new(p, add->server);
 
     MP_TRACE_d(MP_FUNC, "basev==0x%lx, addv==0x%lx, mrg==0x%lx\n", 
                (unsigned long)basev, (unsigned long)addv,

Modified: perl/modperl/trunk/src/modules/perl/modperl_config.h
URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_config.h?rev=291193&r1=291192&r2=291193&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_config.h (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_config.h Fri Sep 23 12:30:51 2005
@@ -20,7 +20,7 @@
 
 void *modperl_config_dir_merge(apr_pool_t *p, void *basev, void *addv);
 
-modperl_config_srv_t *modperl_config_srv_new(apr_pool_t *p);
+modperl_config_srv_t *modperl_config_srv_new(apr_pool_t *p, server_rec *s);
 
 modperl_config_dir_t *modperl_config_dir_new(apr_pool_t *p);
 

Modified: perl/modperl/trunk/src/modules/perl/modperl_module.c
URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_module.c?rev=291193&r1=291192&r2=291193&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_module.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_module.c Fri Sep 23 12:30:51 2005
@@ -387,7 +387,7 @@
          * needed by the Perl callback.
          */
         if (!scfg) {
-            scfg = modperl_config_srv_new(p);
+            scfg = modperl_config_srv_new(p, s);
             modperl_set_module_config(s->module_config, scfg);
             scfg->server = s;
         }

Modified: perl/modperl/trunk/t/response/TestDirective/perldo.pm
URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/t/response/TestDirective/perldo.pm?rev=291193&r1=291192&r2=291193&view=diff
==============================================================================
--- perl/modperl/trunk/t/response/TestDirective/perldo.pm (original)
+++ perl/modperl/trunk/t/response/TestDirective/perldo.pm Fri Sep 23 12:30:51 2005
@@ -11,7 +11,7 @@
 sub handler {
     my $r = shift;
 
-    plan $r, tests => 15;
+    plan $r, tests => 16;
 
     ok t_cmp('yes', $TestDirective::perl::worked);
 
@@ -39,7 +39,8 @@
     # 3 would mean we are still counting lines from the context of the eval
     ok $TestDirective::perl::line > 3;
 
-    ok t_cmp($0, "-e", '$0');
+    ok !t_cmp($0, '-e', '$0');
+    ok t_cmp($0, qr/httpd/, '$0');
 
     ok t_cmp($TestDirective::perl::Included, 1, "Include");