]> Sergey Matveev's repositories - public-inbox.git/commitdiff
on_destroy: support ->cancel callback
authorEric Wong <e@80x24.org>
Mon, 28 Nov 2022 05:32:04 +0000 (05:32 +0000)
committerEric Wong <e@80x24.org>
Mon, 28 Nov 2022 23:38:57 +0000 (23:38 +0000)
We probably use this idiom elsewhere, but having this method
around to make future use cases more readable is probably prudent.

lib/PublicInbox/OnDestroy.pm
t/on_destroy.t

index 615bc450998beea1e82606db35c0d456450d966b..d9a6cd241becf48025f37f11389b94a4ee821396 100644 (file)
@@ -1,13 +1,16 @@
-# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
 package PublicInbox::OnDestroy;
+use v5.12;
 
 sub new {
        shift; # ($class, $cb, @args)
        bless [ @_ ], __PACKAGE__;
 }
 
+sub cancel { @{$_[0]} = () }
+
 sub DESTROY {
        my ($cb, @args) = @{$_[0]};
        if (!ref($cb) && $cb) {
index 0de67d0bcde10c116e49270dd20a7dff3b1ea72e..e79451005d52296b27fa3749be52873ff71a324b 100644 (file)
@@ -1,6 +1,5 @@
 #!perl -w
-use strict;
-use v5.10.1;
+use v5.12;
 use Test::More;
 require_ok 'PublicInbox::OnDestroy';
 my @x;
@@ -25,6 +24,11 @@ $od = PublicInbox::OnDestroy->new($$, sub { $tmp = $$ });
 undef $od;
 is($tmp, $$, '$tmp set to $$ by callback');
 
+$od = PublicInbox::OnDestroy->new($$, sub { $tmp = 'foo' });
+$od->cancel;
+$od = undef;
+isnt($tmp, 'foo', '->cancel');
+
 if (my $nr = $ENV{TEST_LEAK_NR}) {
        for (0..$nr) {
                $od = PublicInbox::OnDestroy->new(sub { @x = @_ }, qw(x y));