From: Eric Wong <e@yhbt.net>
Date: Sun, 5 Apr 2020 07:53:48 +0000 (+0000)
Subject: mbox: halve ->getline "context switches"
X-Git-Tag: v1.4.0~21
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=1e5d704f1234ded472b800e42bedb5579780296e;p=public-inbox.git

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.
---

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