about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-02-02 22:11:42 -1000
committerEric Wong <e@80x24.org>2021-02-04 01:37:09 +0000
commita848cb1e2229e0b313271dad879f9a101e414316 (patch)
tree4e58d3a7360d7f7663f6c490d1ada08eb6cae731
parent298751baed3ce7ae1549356152784b83220a31f0 (diff)
downloadpublic-inbox-a848cb1e2229e0b313271dad879f9a101e414316.tar.gz
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.
-rw-r--r--lib/PublicInbox/LEI.pm2
-rwxr-xr-xscript/lei2
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