about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2018-03-19 08:14:53 +0000
committerEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2018-03-19 08:16:34 +0000
commit0514c910b0a33fe758cd92fd89fa79a3291bf5fc (patch)
tree8e8e8c070085c527329a56f1358788594e3bc373
parent82bd094dc2e2da6067fc089e37d538c171732e60 (diff)
downloadpublic-inbox-0514c910b0a33fe758cd92fd89fa79a3291bf5fc.tar.gz
v2writable: ensure ->done is idempotent
This matches Import::done behavior
-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();