X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FEvCleanup.pm;h=b2f8c0886f031e4d9e6cde95ae12095bf646f2b9;hb=cd50d183273c105a7f08b1875ba6f7a51d9f8e9a;hp=b9fe843b18a7bcb9ae97777d99bdc16984426973;hpb=427245acacaf04a882d5524e662075909b96905b;p=public-inbox.git diff --git a/lib/PublicInbox/EvCleanup.pm b/lib/PublicInbox/EvCleanup.pm index b9fe843b..b2f8c088 100644 --- a/lib/PublicInbox/EvCleanup.pm +++ b/lib/PublicInbox/EvCleanup.pm @@ -1,12 +1,16 @@ -# Copyright (C) 2016 all contributors +# Copyright (C) 2016-2018 all contributors # License: AGPL-3.0+ -# event cleanups (currently for Danga::Socket) +# event cleanups (currently for PublicInbox::DS) package PublicInbox::EvCleanup; use strict; use warnings; -use base qw(Danga::Socket); +use base qw(PublicInbox::DS); use fields qw(rd); + +my $ENABLED; +sub enabled { $ENABLED } +sub enable { $ENABLED = 1 } my $singleton; my $asapq = [ [], undef ]; my $nextq = [ [], undef ]; @@ -15,7 +19,11 @@ my $laterq = [ [], undef ]; sub once_init () { my $self = fields::new('PublicInbox::EvCleanup'); my ($r, $w); + + # This is a dummy pipe which is always writable so it can always + # fires in the next event loop iteration. pipe($r, $w) or die "pipe: $!"; + fcntl($w, 1031, 4096) if $^O eq 'linux'; # 1031: F_SETPIPE_SZ $self->SUPER::new($w); $self->{rd} = $r; # never read, since we never write.. $self; @@ -30,7 +38,7 @@ sub _run_all ($) { $_->() foreach @$run; } -# ensure Danga::Socket::ToClose fires after timers fire +# ensure PublicInbox::DS::ToClose fires after timers fire sub _asap_close () { $asapq->[1] ||= _asap_timer() } sub _run_asap () { _run_all($asapq) } @@ -44,7 +52,7 @@ sub _run_later () { _asap_close(); } -# Called by Danga::Socket +# Called by PublicInbox::DS sub event_write { my ($self) = @_; $self->watch_write(0); @@ -66,19 +74,19 @@ sub asap ($) { sub next_tick ($) { my ($cb) = @_; push @{$nextq->[0]}, $cb; - $nextq->[1] ||= Danga::Socket->AddTimer(0, *_run_next); + $nextq->[1] ||= PublicInbox::DS->AddTimer(0, *_run_next); } sub later ($) { my ($cb) = @_; push @{$laterq->[0]}, $cb; - $laterq->[1] ||= Danga::Socket->AddTimer(60, *_run_later); + $laterq->[1] ||= PublicInbox::DS->AddTimer(60, *_run_later); } END { _run_asap(); - _run_next(); - _run_later(); + _run_all($nextq); + _run_all($laterq); } 1;