about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/V2Writable.pm3
-rw-r--r--t/v2writable.t2
2 files changed, 4 insertions, 1 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index 36901cde..5c104d8e 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -249,10 +249,11 @@ sub remove {
 
 sub done {
         my ($self) = @_;
+        my $locked = defined $self->{idx_parts};
         my $im = delete $self->{im};
         $im->done if $im; # PublicInbox::Import::done
         $self->searchidx_checkpoint(0);
-        $self->lock_release;
+        $self->lock_release if $locked;
 }
 
 sub checkpoint {
diff --git a/t/v2writable.t b/t/v2writable.t
index 5245a84b..771e8c17 100644
--- a/t/v2writable.t
+++ b/t/v2writable.t
@@ -223,6 +223,8 @@ EOF
         $im->done;
         is($git0->qx(qw(log -1 --pretty=raw --raw -r --no-abbrev)),
                 $after, 'no git history made with idempotent remove');
+        eval { $im->done };
+        ok(!$@, '->done is idempotent');
 }
 
 done_testing();