about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-04-05 07:53:48 +0000
committerEric Wong <e@yhbt.net>2020-04-05 22:06:22 +0000
commit1e5d704f1234ded472b800e42bedb5579780296e (patch)
tree7cd25b6853d93b98a78e740bc5cc6b816c0637f2
parentfec19e492eacb10f990091592f423542ab4249bd (diff)
downloadpublic-inbox-1e5d704f1234ded472b800e42bedb5579780296e.tar.gz
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.
-rw-r--r--lib/PublicInbox/Mbox.pm9
1 files 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