]> Sergey Matveev's repositories - public-inbox.git/commitdiff
ds: avoid unnecessary timer for waitpid
authorEric Wong <e@80x24.org>
Mon, 31 Aug 2020 04:41:39 +0000 (04:41 +0000)
committerEric Wong <e@80x24.org>
Tue, 1 Sep 2020 00:19:20 +0000 (00:19 +0000)
It doesn't seem necessary, since we won't call dwaitpid()
until we see an EOF.

lib/PublicInbox/DS.pm

index b252ea3c141f326aa7c53c3dd8b98322df1d67d8..661be1fd2c4553723e07587f26e04be4adb5ffb1 100644 (file)
@@ -40,7 +40,7 @@ my $wait_pids; # list of [ pid, callback, callback_arg ]
 my $later_queue; # list of callbacks to run at some later interval
 my $EXPMAP; # fd -> idle_time
 our $EXPTIME = 180; # 3 minutes
-my ($later_timer, $reap_armed, $reap_timer, $exp_timer);
+my ($later_timer, $reap_armed, $exp_timer);
 my $ToClose; # sockets to close when event loop is done
 our (
      %DescriptorMap,             # fd (num) -> PublicInbox::DS object
@@ -70,7 +70,7 @@ sub Reset {
     %DescriptorMap = ();
     $in_loop = $wait_pids = $later_queue = $reap_armed = undef;
     $EXPMAP = {};
-    $nextq = $ToClose = $reap_timer = $later_timer = $exp_timer = undef;
+    $nextq = $ToClose = $later_timer = $exp_timer = undef;
     $LoopTimeout = -1;  # no timeout by default
     @Timers = ();
 
@@ -240,14 +240,7 @@ sub reap_pids {
                }
        }
        # we may not be done, yet, and could've missed/masked a SIGCHLD:
-       if ($wait_pids && !$reap_armed) {
-               $reap_timer //= add_timer(1, \&reap_pids_timed);
-       }
-}
-
-sub reap_pids_timed {
-       $reap_timer = undef;
-       goto \&reap_pids;
+       $reap_armed //= requeue(\&reap_pids) if $wait_pids;
 }
 
 # reentrant SIGCHLD handler (since reap_pids is not reentrant)