From 1e5d704f1234ded472b800e42bedb5579780296e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 5 Apr 2020 07:53:48 +0000 Subject: mbox: halve ->getline "context switches" 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(-) (limited to 'lib') 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 -- cgit v1.2.3-24-ge0c7