From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 288C61FD56 for ; Sun, 12 Jan 2020 21:17:58 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 07/11] ds: rely on autovivification for nextq Date: Sun, 12 Jan 2020 21:17:52 +0000 Message-Id: <20200112211756.23100-8-e@yhbt.net> In-Reply-To: <20200112211756.23100-1-e@yhbt.net> References: <20200112211756.23100-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Another place we can delay creating arrays until needed. --- lib/PublicInbox/DS.pm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index 7a4aa7cc..ac9065f2 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -71,11 +71,10 @@ Reset all state =cut sub Reset { %DescriptorMap = (); - $nextq = []; $WaitPids = []; $later_queue = []; $EXPMAP = {}; - $ToClose = $reap_timer = $later_timer = $exp_timer = undef; + $nextq = $ToClose = $reap_timer = $later_timer = $exp_timer = undef; $LoopTimeout = -1; # no timeout by default @Timers = (); @@ -179,8 +178,8 @@ sub FirstTimeEventLoop { sub now () { clock_gettime(CLOCK_MONOTONIC) } sub next_tick () { - my $q = $nextq; - $nextq = []; + my $q = $nextq or return; + $nextq = undef; for (@$q) { # we avoid "ref" on blessed refs to workaround a Perl 5.16.3 leak: # https://rt.perl.org/Public/Bug/Display.html?id=114340 @@ -196,7 +195,7 @@ sub next_tick () { sub RunTimers { next_tick(); - return ((@$nextq || $ToClose) ? 0 : $LoopTimeout) unless @Timers; + return (($nextq || $ToClose) ? 0 : $LoopTimeout) unless @Timers; my $now = now(); @@ -207,7 +206,7 @@ sub RunTimers { } # timers may enqueue into nextq: - return 0 if (@$nextq || $ToClose); + return 0 if ($nextq || $ToClose); return $LoopTimeout unless @Timers; @@ -249,7 +248,7 @@ sub reap_pids { } # reentrant SIGCHLD handler (since reap_pids is not reentrant) -sub enqueue_reap ($) { push @$nextq, \&reap_pids }; +sub enqueue_reap ($) { push @$nextq, \&reap_pids }; # autovivifies sub in_loop () { $in_loop } @@ -353,7 +352,7 @@ sub new { ### I N S T A N C E M E T H O D S ##################################################################### -sub requeue ($) { push @$nextq, $_[0] } +sub requeue ($) { push @$nextq, $_[0] } # autovivifies =head2 C<< $obj->close >>