perl-modperl-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ph...@apache.org
Subject svn commit: r907292 - in /perl/Apache-DBI/trunk: Changes lib/Apache/DBI.pm
Date Sat, 06 Feb 2010 20:24:31 GMT
Author: phred
Date: Sat Feb  6 20:24:30 2010
New Revision: 907292

URL: http://svn.apache.org/viewvc?rev=907292&view=rev
Log:
Add childexithandler to prevent database connection warnings when the httpd
child exits.

Submitted by: Nick Wellnhofer<wellnhofer@aevum.de>
Reviewed by: Fred Moyer
Tested by: Fred Moyer, Adam Prime

http://marc.info/?l=apache-modperl-dev&m=124824443220933&w=2

Modified:
    perl/Apache-DBI/trunk/Changes
    perl/Apache-DBI/trunk/lib/Apache/DBI.pm

Modified: perl/Apache-DBI/trunk/Changes
URL: http://svn.apache.org/viewvc/perl/Apache-DBI/trunk/Changes?rev=907292&r1=907291&r2=907292&view=diff
==============================================================================
--- perl/Apache-DBI/trunk/Changes (original)
+++ perl/Apache-DBI/trunk/Changes Sat Feb  6 20:24:30 2010
@@ -1,6 +1,8 @@
 Revision history for ApacheDBI.
 
 1.09
+  - Adds PerlChildExitHandler to disconnect existing connections
+    Submitted by: Nick Wellnhoffer <wellnhofer@aevum.de>
 
 1.08 February 3rd, 2010
   - Fix bug to allow DBI in startup.pl etc again

Modified: perl/Apache-DBI/trunk/lib/Apache/DBI.pm
URL: http://svn.apache.org/viewvc/perl/Apache-DBI/trunk/lib/Apache/DBI.pm?rev=907292&r1=907291&r2=907292&view=diff
==============================================================================
--- perl/Apache-DBI/trunk/lib/Apache/DBI.pm (original)
+++ perl/Apache-DBI/trunk/lib/Apache/DBI.pm Sat Feb  6 20:24:30 2010
@@ -39,6 +39,9 @@
                                 #   a negative value de-activates ping,
                                 #   default = 0
 my %LastPingTime;               # keeps track of last ping per data_source
+my $ChildExitHandlerInstalled;  # set to true on installation of
+                                # PerlChildExitHandler
+my $InChild;
 
 # Check to see if we need to reset TaintIn and TaintOut
 my $TaintInOut = ($DBI::VERSION >= 1.31) ? 1 : 0;
@@ -134,6 +137,23 @@
         }
     }
 
+    # this PerlChildExitHandler is supposed to disconnect all open
+    # connections to the database
+    if (!$ChildExitHandlerInstalled) {
+        $ChildExitHandlerInstalled = 1;
+        my $s;
+        if (MP2) {
+            $s = Apache2::ServerUtil->server;
+        }
+        elsif (Apache->can('push_handlers')) {
+            $s = 'Apache';
+        }
+        if ($s) {
+            debug(2, "$prefix push PerlChildExitHandler");
+            $s->push_handlers(PerlChildExitHandler => \&childexit);
+        }
+    }
+
     # this PerlCleanupHandler is supposed to initiate a rollback after the
     # script has finished if AutoCommit is off.  however, cleanup can only
     # be determined at end of handle life as begin_work may have been called
@@ -218,6 +238,22 @@
     1;
 }
 
+# The PerlChildExitHandler disconnects all open connections
+sub childexit {
+
+    my $prefix = "$$ Apache::DBI            ";
+    debug(2, "$prefix PerlChildExitHandler");
+
+    foreach my $dbh (values(%Connected)) {
+        eval { DBI::db::disconnect($dbh) };
+        if ($@) {
+            debug(2, "$prefix DBI::db::disconnect failed - $@");
+        }
+    }
+
+    1;
+}
+
 # The PerlCleanupHandler is supposed to initiate a rollback after the script
 # has finished if AutoCommit is off.
 # Note: the PerlCleanupHandler runs after the response has been sent to



Mime
View raw message