From 6825fa7f3b63948d5f4226b94a877ee1becf30ee Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Mon, 25 Feb 2013 17:16:20 -0700 Subject: [PATCH] Add parent attrib to Cxn to fix forking after --daemonize. --- lib/Cxn.pm | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/lib/Cxn.pm b/lib/Cxn.pm index 7a10167d..54b2964e 100644 --- a/lib/Cxn.pm +++ b/lib/Cxn.pm @@ -98,23 +98,24 @@ sub new { } my $self = { - dsn => $dsn, - dbh => $args{dbh}, - dsn_name => $dp->as_string($dsn, [qw(h P S)]), - hostname => '', - set => $args{set}, - NAME_lc => defined($args{NAME_lc}) ? $args{NAME_lc} : 1, - dbh_set => 0, - OptionParser => $o, - DSNParser => $dp, + dsn => $dsn, + dbh => $args{dbh}, + dsn_name => $dp->as_string($dsn, [qw(h P S)]), + hostname => '', + set => $args{set}, + NAME_lc => defined($args{NAME_lc}) ? $args{NAME_lc} : 1, + dbh_set => 0, + OptionParser => $o, + DSNParser => $dp, is_cluster_node => undef, + parent => $args{parent}, }; return bless $self, $class; } sub connect { - my ( $self ) = @_; + my ( $self, %opts ) = @_; my $dsn = $self->{dsn}; my $dp = $self->{DSNParser}; my $o = $self->{OptionParser}; @@ -126,7 +127,13 @@ sub connect { $dsn->{p} = OptionParser::prompt_noecho("Enter MySQL password: "); $self->{asked_for_pass} = 1; } - $dbh = $dp->get_dbh($dp->get_cxn_params($dsn), { AutoCommit => 1 }); + $dbh = $dp->get_dbh( + $dp->get_cxn_params($dsn), + { + AutoCommit => 1, + %opts, + }, + ); } PTDEBUG && _d($dbh, 'Connected dbh to', $self->{name}); @@ -163,6 +170,11 @@ sub set_dbh { $self->{hostname} = $hostname; } + if ( $self->{parent} ) { + PTDEBUG && _d($dbh, 'Setting InactiveDestroy=1 in parent'); + $dbh->{InactiveDestroy} = 1; + } + # Call the set callback to let the caller SET any MySQL variables. if ( my $set = $self->{set}) { $set->($dbh); @@ -206,12 +218,18 @@ sub name { sub DESTROY { my ($self) = @_; - if ( $self->{dbh} - && blessed($self->{dbh}) - && $self->{dbh}->can("disconnect") ) { + + if ( $self->{parent} ) { + PTDEBUG && _d('Not disconnecting dbh in parent'); + } + elsif ( $self->{dbh} + && blessed($self->{dbh}) + && $self->{dbh}->can("disconnect") ) + { PTDEBUG && _d('Disconnecting dbh', $self->{dbh}, $self->{name}); $self->{dbh}->disconnect(); } + return; }