]> Sergey Matveev's repositories - public-inbox.git/blob - lib/PublicInbox/EvCleanup.pm
check for File::Temp 0.19 for ->newdir method
[public-inbox.git] / lib / PublicInbox / EvCleanup.pm
1 # Copyright (C) 2016-2019 all contributors <meta@public-inbox.org>
2 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
3
4 # event cleanups (for PublicInbox::DS)
5 package PublicInbox::EvCleanup;
6 use strict;
7 use warnings;
8 require PublicInbox::DS;
9
10 # this only runs under public-inbox-{httpd/nntpd}, not generic PSGI servers
11 my $ENABLED;
12 sub enabled { $ENABLED }
13 sub enable { $ENABLED = 1 }
14 my $laterq = [ [], undef ];
15
16 sub _run_later () {
17         my $run = $laterq->[0];
18         $laterq->[0] = [];
19         $laterq->[1] = undef;
20         $_->() foreach @$run;
21 }
22
23 sub later ($) {
24         my ($cb) = @_;
25         push @{$laterq->[0]}, $cb;
26         $laterq->[1] ||= PublicInbox::DS->AddTimer(60, *_run_later);
27 }
28
29 END { _run_later() }
30 1;