stas        2003/10/16 11:23:30

  Modified:    src/modules/perl mod_perl.c
               .        Changes
  Added:       t/response/TestPerl api.pm
  Log:
  perl 5.8.1 w/ ithreads has a bug where it reports the wrong parent pid
  (as the process was never forked), provide a local workaround (+ new
  test).
  
  Revision  Changes    Path
  1.190     +9 -0      modperl-2.0/src/modules/perl/mod_perl.c
  
  Index: mod_perl.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v
  retrieving revision 1.189
  retrieving revision 1.190
  diff -u -u -r1.189 -r1.190
  --- mod_perl.c        14 Oct 2003 02:33:08 -0000      1.189
  +++ mod_perl.c        16 Oct 2003 18:23:30 -0000      1.190
  @@ -695,6 +695,15 @@
   {
       modperl_perl_init_ids_server(s);
   
  +#if PERL_REVISION == 5 && PERL_VERSION == 8 && PERL_SUBVERSION == 1 && \
  +    defined(THREADS_HAVE_PIDS) 
  +    {
  +        MP_dSCFG(s);
  +        dTHXa(scfg->mip->parent->perl);
  +        PL_ppid = (IV)getppid();
  +    }
  +#endif     
  +    
       apr_pool_cleanup_register(p, (void *)s, modperl_child_exit,
                                 apr_pool_cleanup_null);
   }
  
  
  
  1.1                  modperl-2.0/t/response/TestPerl/api.pm
  
  Index: api.pm
  ===================================================================
  package TestPerl::api;
  
  # some perl APIs that we need to test that they work alright under mod_perl
  
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Test;
  use Apache::TestUtil;
  use Apache::TestTrace;
  
  use Apache::Const -compile => 'OK';
  
  sub handler {
      my $r = shift;
  
      plan $r, tests => 1;
  
      {
          # 5.8.1 w/ ithreads has a bug where it caches ppid in PL_ppid,
          # but updates the record only if perl's fork is called, which
          # is not the case with mod_perl. This results in getppid()
          # returning 1. A local workaround in the mod_perl source at
          # the child_init phase fixes the problem.
          my $ppid = getppid();
          t_debug "ppid $ppid (pid $$)";
          ok $ppid > 1;
      }
  
      Apache::OK;
  }
  
  1;
  
  
  
  1.238     +4 -0      modperl-2.0/Changes
  
  Index: Changes
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/Changes,v
  retrieving revision 1.237
  retrieving revision 1.238
  diff -u -u -r1.237 -r1.238
  --- Changes   15 Oct 2003 01:29:07 -0000      1.237
  +++ Changes   16 Oct 2003 18:23:30 -0000      1.238
  @@ -12,6 +12,10 @@
   
   =item 1.99_11-dev - 
   
  +perl 5.8.1 w/ ithreads has a bug where it reports the wrong parent pid
  +(as the process was never forked), provide a local workaround (+ new
  +test). [Stas]
  +
   overriden STD* streams now can be further overriden and will be
   properly restored, which allows functions like $r->internal_redirect
   work (+add tests) [Stas]
  
  
  

Reply via email to