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,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 9EDE21F610 for ; Sun, 5 Apr 2020 07:53:49 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/3] mbox: halve ->getline "context switches" Date: Sun, 5 Apr 2020 07:53:48 +0000 Message-Id: <20200405075349.2173-3-e@yhbt.net> In-Reply-To: <20200405075349.2173-1-e@yhbt.net> References: <20200405075349.2173-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We don't need to take extra trips through the event loop for a single message (in the common case of Message-IDs being unique). In fact, holding the body reference left behind by Email::Simple could be harmful to memory usage, though in practice it's not a big problem since code paths which use Email::MIME take far more. --- lib/PublicInbox/Mbox.pm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm index 3013dc91..d5beceaf 100644 --- a/lib/PublicInbox/Mbox.pm +++ b/lib/PublicInbox/Mbox.pm @@ -44,19 +44,16 @@ sub getline { my ($ctx, $id, $prev, $next, $mref, $hdr) = @$more; if ($hdr) { # first message hits this, only pop @$more; # $hdr - return msg_hdr($ctx, $hdr); - } - if ($mref) { # all messages hit this pop @$more; # $mref - return msg_body($$mref); + return msg_hdr($ctx, $hdr) . msg_body($$mref); } my $cur = $next or return; my $ibx = $ctx->{-inbox}; $next = $ibx->over->next_by_mid($ctx->{mid}, \$id, \$prev); $mref = $ibx->msg_by_smsg($cur) or return; $hdr = Email::Simple->new($mref)->header_obj; - @$more = ($ctx, $id, $prev, $next, $mref); # $next may be undef, here - msg_hdr($ctx, $hdr); # all but first message hits this + @$more = ($ctx, $id, $prev, $next); # $next may be undef, here + msg_hdr($ctx, $hdr) . msg_body($$mref); } sub close {} # noop