From a848cb1e2229e0b313271dad879f9a101e414316 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 2 Feb 2021 22:11:42 -1000 Subject: [PATCH] lei: use sleep(1) loop for infinite sleep Perl may internally race and miss signals due to a lack of self-pipe / eventfd / signalfd / EVFILT_SIGNAL usage. While our event loop paths avoid these problems by using signalfd or EVFILT_SIGNAL, thse sleep() calls are not within the event loop. --- lib/PublicInbox/LEI.pm | 2 +- script/lei | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 005f6f7a..28dce0c5 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -299,7 +299,7 @@ sub x_it ($$) { if (my $signum = ($code & 127)) { # usually SIGPIPE (13) $SIG{PIPE} = 'DEFAULT'; # $SIG{$signum} doesn't work kill $signum, $$; - sleep; # wait for signal + sleep(1) while 1; # wait for signal } else { $quit->($code >> 8); } diff --git a/script/lei b/script/lei index 58f0dbe9..40c21ad8 100755 --- a/script/lei +++ b/script/lei @@ -116,7 +116,7 @@ Falling back to (slow) one-shot mode sigchld(); if (my $sig = ($x_it_code & 127)) { kill $sig, $$; - sleep; + sleep(1) while 1; } exit($x_it_code >> 8); } else { # for systems lacking Socket::MsgHdr or Inline::C -- 2.44.0