]> Sergey Matveev's repositories - public-inbox.git/commitdiff
mbox: halve ->getline "context switches"
authorEric Wong <e@yhbt.net>
Sun, 5 Apr 2020 07:53:48 +0000 (07:53 +0000)
committerEric Wong <e@yhbt.net>
Sun, 5 Apr 2020 22:06:22 +0000 (22:06 +0000)
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

index 3013dc91d9e5609ad6de78a0b754bbb7076c72df..d5beceaf65e18b650e147dfef5ed213e8f1a5270 100644 (file)
@@ -44,19 +44,16 @@ sub getline {
        my ($ctx, $id, $prev, $next, $mref, $hdr) = @$more;
        if ($hdr) { # first message hits this, only
                pop @$more; # $hdr
        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
                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;
        }
        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
 }
 
 sub close {} # noop