-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, 0);
-
- # always writable, since PublicInbox::EvCleanup::event_step
- # never drains wbuf. We can avoid wasting a hash slot by
- # stuffing the read-end of the pipe into the never-to-be-touched
- # wbuf
- $self->{wbuf} = $r;
- $self;
-}
-
-sub _run_all ($) {
- my ($q) = @_;
-
- my $run = $q->[0];
- $q->[0] = [];
- $q->[1] = undef;
- $_->() foreach @$run;
-}
-
-# ensure PublicInbox::DS::ToClose processing after timers fire
-sub _asap_close () { $asapq->[1] ||= _asap_timer() }
-
-# Called by PublicInbox::DS
-sub event_step { _run_all($asapq) }
-
-sub _run_next () {
- _run_all($nextq);
- _asap_close();
-}
-