It may be possible for updates or changes to be uncommitted
until disconnect, so we'll use flock() as we do elsewhere
to avoid the polling retry behavior of SQLite.
We also need to clear CachedKids before disconnecting to
to avoid warnings like:
->disconnect invalidates 1 active statement handle
(either destroy statement handles or call finish on
them before disconnecting)
sub pause_dedupe {
my ($self) = @_;
my $skv = $self->[0];
+ $skv->dbh_release;
delete($skv->{dbh}) if $skv;
}
$sth->fetchrow_array;
}
+sub dbh_release {
+ my ($self, $lock) = @_;
+ my $dbh = delete $self->{dbh} or return;
+ $lock //= $self->lock_for_scope; # may be needed for WAL
+ %{$dbh->{CachedKids}} = (); # cleanup prepare_cached
+ $dbh->disconnect;
+}
+
sub DESTROY {
my ($self) = @_;
- delete $self->{dbh};
+ dbh_release($self);
my $dir = delete $self->{"tmp$$.$self"} or return;
my $tries = 0;
do {