Author: timbo
Date: Fri May  7 05:28:40 2010
New Revision: 13959

Modified:
   dbi/trunk/Changes
   dbi/trunk/lib/DBI/Profile.pm
   dbi/trunk/lib/DBI/ProfileDumper/Apache.pm

Log:
Clear profile data at end of on_destroy method.
Tweaks to DBI/ProfileDumper/Apache.pm


Modified: dbi/trunk/Changes
==============================================================================
--- dbi/trunk/Changes   (original)
+++ dbi/trunk/Changes   Fri May  7 05:28:40 2010
@@ -13,6 +13,8 @@
 
   Changed DBI::ProfileDumper to rename any existing profile file by
     appending .prev, instead of overwriting it.
+  Changed DBI::ProfileDumper::Apache to work in more configurations
+    including vhosts using PerlOptions +Parent.
 
 =head2 Changes in DBI 1.611 (svn r13935) 29th April 2010
 

Modified: dbi/trunk/lib/DBI/Profile.pm
==============================================================================
--- dbi/trunk/lib/DBI/Profile.pm        (original)
+++ dbi/trunk/lib/DBI/Profile.pm        Fri May  7 05:28:40 2010
@@ -704,7 +704,7 @@
 
 sub new {
     my $class = shift;
-    my $profile = { @_ };
+    my $profile = { Trace => 0, @_ };
     return bless $profile => $class;
 }
 
@@ -721,7 +721,7 @@
     $arg =~ s/^DBI::/2\/DBI::/
         and carp "Automatically changed old-style DBI::Profile specification 
to $arg";
 
-    # it's a path/module/arg/arg/arg list
+    # it's a path/module/k1:v1:k2:v2:... list
     my ($path, $package, $args) = split /\//, $arg, 3;
     my @args = (defined $args) ? split(/:/, $args, -1) : ();
     my @Path;
@@ -926,11 +926,13 @@
     return unless $self->{Data};
     my $detail = $self->format();
     $ON_DESTROY_DUMP->($detail) if $detail;
+    $self->{Data} = undef;
 }
 
 sub DESTROY {
     my $self = shift;
     local $@;
+    DBI->trace_msg("profile data DESTROY\n",0) if $self->{Trace} >= 2;
     eval { $self->on_destroy };
     if ($@) {
         chomp $@;

Modified: dbi/trunk/lib/DBI/ProfileDumper/Apache.pm
==============================================================================
--- dbi/trunk/lib/DBI/ProfileDumper/Apache.pm   (original)
+++ dbi/trunk/lib/DBI/ProfileDumper/Apache.pm   Fri May  7 05:28:40 2010
@@ -166,53 +166,42 @@
 use DBI::ProfileDumper;
 use File::Spec;
 
-my $parent_pid = $$; # init to pid because we are currently the parent of the 
children-to-be
+my $initial_pid = $$;
 
 use constant MP2 => ($ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} 
== 2) ? 1 : 0;
 
-my $apache_server;
 my $server_root_dir;
 
 if (MP2) {
-    require Apache2::Const;
-    Apache2::Const->import(-compile => qw(OK DECLINED));
     require Apache2::ServerUtil;
-    $apache_server = Apache2::ServerUtil->server;
     $server_root_dir = Apache2::ServerUtil::server_root();
 }
 else {
     require Apache;
-    require Apache::Constants;
-    Apache::Constants->import(qw(OK DECLINED));
-    $apache_server = "Apache";
     $server_root_dir = eval { Apache->server_root_relative('') } || "/tmp";
 }
 
 
-if (UNIVERSAL::can($apache_server, "push_handlers")) {
-    $apache_server->push_handlers(PerlChildInitHandler => sub {
-        $parent_pid = getppid();
-        #warn "PerlChildInitHandler pid$$ has ppid $parent_pid";
-        OK();
-    });
-}
-
-sub dirname {
+sub _dirname {
     my $self = shift;
-    return $self->{Dir} if $self->{Dir};
-    $self->{Dir} ||= $ENV{DBI_PROFILE_APACHE_LOG_DIR};
-    return $self->{Dir} || File::Spec->catdir($server_root_dir, "logs");
+    return $self->{Dir} ||= $ENV{DBI_PROFILE_APACHE_LOG_DIR}
+                        || File::Spec->catdir($server_root_dir, "logs");
 }
 
+
 sub filename {
     my $self = shift;
     my $filename = $self->SUPER::filename(@_);
+    return $filename if not $filename; # not set yet
+
     # to be able to identify groups of profile files from the same set of
     # apache processes, we include the parent pid in the file name
     # as well as the pid.
-    $filename .= ".$parent_pid.$$";
+    my $group_pid = ($$ eq $initial_pid) ? $$ : getppid();
+    $filename .= ".$group_pid.$$";
+
     return $filename if File::Spec->file_name_is_absolute($filename);
-    return File::Spec->catfile($self->dirname, $filename);
+    return File::Spec->catfile($self->_dirname, $filename);
 }
 
 

Reply via email to