Make the inactivate sub a bit smarter. May fix the recurring doublefree/coredump...
authorGreg Sabino Mullane <greg@endpoint.com>
Fri, 4 Oct 2013 14:30:44 +0000 (10:30 -0400)
committerGreg Sabino Mullane <greg@endpoint.com>
Fri, 4 Oct 2013 14:30:44 +0000 (10:30 -0400)
Bucardo.pm

index dc268ab889c0c8ad4bfcc58d43ced38d9594c424..45dcdfa068bc258f75a0e757c113754f326a294e 100644 (file)
@@ -6551,12 +6551,16 @@ sub fork_and_inactivate {
             delete $self->{dbhlist}{$iname};
         }
         ## Now go through common shared database handle locations, and delete them
+        $self->{masterdbh}->{InactiveDestroy} = 1
+            if $self->{masterdbh};
         delete $self->{masterdbh};
 
         ## Clear the 'sdb' structure of any existing database handles
         if (exists $self->{sdb}) {
             for my $dbname (keys %{ $self->{sdb} }) {
-                for my $item (qw/ dbh backend kicked /) {
+                for my $item (qw/ dbh /) {
+                    $self->{sdb}{$dbname}{$item}->{InactiveDestroy} = 1
+                        if exists $self->{sdb}{$dbname}{$item};
                     delete $self->{sdb}{$dbname}{$item};
                 }
             }
@@ -6567,7 +6571,9 @@ sub fork_and_inactivate {
             if (exists $self->{sync}{name}) { ## This is a controller/kid with a single sync
                 for my $dbname (sort keys %{ $self->{sync}{db} }) {
                     $self->glog("Removing reference to database $dbname", LOG_DEBUG);
-                        for my $item (qw/ dbh backend kicked /) {
+                        for my $item (qw/ dbh /) {
+                            $self->{sync}{db}{$dbname}{$item}->{InactiveDestroy} = 1
+                                if exists $self->{sync}{db}{$dbname}{$item};
                             delete $self->{sync}{db}{$dbname}{$item};
                         }
                     }
@@ -6576,7 +6582,9 @@ sub fork_and_inactivate {
                 for my $syncname (keys %{ $self->{sync} }) {
                     for my $dbname (sort keys %{ $self->{sync}{$syncname}{db} }) {
                         $self->glog("Removing reference to database $dbname in sync $syncname", LOG_DEBUG);
-                        for my $item (qw/ dbh backend kicked /) {
+                        for my $item (qw/ dbh /) {
+                            $self->{sync}{$syncname}{db}{$dbname}{$item}->{InactiveDestroy} = 1
+                                if exists $self->{sync}{$syncname}{db}{$dbname}{$item};
                             delete $self->{sync}{$syncname}{db}{$dbname}{$item};
                         }
                     }