Add parent attrib to Cxn to fix forking after --daemonize.

This commit is contained in:
Daniel Nichter
2013-02-25 17:16:20 -07:00
parent 6aef3e7028
commit 6825fa7f3b

View File

@@ -98,23 +98,24 @@ sub new {
} }
my $self = { my $self = {
dsn => $dsn, dsn => $dsn,
dbh => $args{dbh}, dbh => $args{dbh},
dsn_name => $dp->as_string($dsn, [qw(h P S)]), dsn_name => $dp->as_string($dsn, [qw(h P S)]),
hostname => '', hostname => '',
set => $args{set}, set => $args{set},
NAME_lc => defined($args{NAME_lc}) ? $args{NAME_lc} : 1, NAME_lc => defined($args{NAME_lc}) ? $args{NAME_lc} : 1,
dbh_set => 0, dbh_set => 0,
OptionParser => $o, OptionParser => $o,
DSNParser => $dp, DSNParser => $dp,
is_cluster_node => undef, is_cluster_node => undef,
parent => $args{parent},
}; };
return bless $self, $class; return bless $self, $class;
} }
sub connect { sub connect {
my ( $self ) = @_; my ( $self, %opts ) = @_;
my $dsn = $self->{dsn}; my $dsn = $self->{dsn};
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $o = $self->{OptionParser}; my $o = $self->{OptionParser};
@@ -126,7 +127,13 @@ sub connect {
$dsn->{p} = OptionParser::prompt_noecho("Enter MySQL password: "); $dsn->{p} = OptionParser::prompt_noecho("Enter MySQL password: ");
$self->{asked_for_pass} = 1; $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}); PTDEBUG && _d($dbh, 'Connected dbh to', $self->{name});
@@ -163,6 +170,11 @@ sub set_dbh {
$self->{hostname} = $hostname; $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. # Call the set callback to let the caller SET any MySQL variables.
if ( my $set = $self->{set}) { if ( my $set = $self->{set}) {
$set->($dbh); $set->($dbh);
@@ -206,12 +218,18 @@ sub name {
sub DESTROY { sub DESTROY {
my ($self) = @_; my ($self) = @_;
if ( $self->{dbh}
&& blessed($self->{dbh}) if ( $self->{parent} ) {
&& $self->{dbh}->can("disconnect") ) { 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}); PTDEBUG && _d('Disconnecting dbh', $self->{dbh}, $self->{name});
$self->{dbh}->disconnect(); $self->{dbh}->disconnect();
} }
return; return;
} }