From: Eric Wong Date: Thu, 27 Jun 2019 04:11:22 +0000 (+0000) Subject: nntp: rework and simplify art_lookup response X-Git-Tag: v1.2.0~135^2~3 X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=766cd51e9c77f74a2781ff35fed6554f08e0f29d nntp: rework and simplify art_lookup response We don't need some of the array elements returned from art_lookup, anymore (and haven't used them in years). We can also shorten the lifetime of the Email::Simple object by relying on the fact Email::Simple->new will modify it's arg if given a SCALARREF and allow us to avoid Email::Simple::body calls. Unfortunately, this doesn't seem to provide any noticeable improvement in memory usage when dealing with a 30+ MB test message, since our previous use of ->body_set('') was saving some memory, but forcing a LF-only body to be CRLF was making Perl allocate extra space for s///sg. --- diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 53e18281..30d3dab6 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -510,24 +510,21 @@ find_mid: found: my $smsg = $ng->over->get_art($n) or return $err; my $msg = $ng->msg_by_smsg($smsg) or return $err; - my $s = Email::Simple->new($msg); - if ($set_headers) { - set_nntp_headers($self, $s->header_obj, $ng, $n, $mid); - # must be last - $s->body_set('') if ($set_headers == 2); - } - [ $n, $mid, $s, $smsg->bytes, $smsg->lines, $ng ]; + # Email::Simple->new will modify $msg in-place as documented + # in its manpage, so what's left is the body and we won't need + # to call Email::Simple::body(), later + my $hdr = Email::Simple->new($msg)->header_obj; + set_nntp_headers($self, $hdr, $ng, $n, $mid) if $set_headers; + [ $n, $mid, $msg, $hdr ]; } -sub simple_body_write ($$) { - my ($self, $s) = @_; - my $body = $s->body; - $s->body_set(''); - $body =~ s/^\./../smg; - $body =~ s/(?header_obj->as_string; + my $hdr = $_[0]->as_string; utf8::encode($hdr); $hdr =~ s/(? article retrieved - head and body follow"); - msg_more($self, _header($s)); + msg_more($self, _header($hdr)); msg_more($self, "\r\n"); - simple_body_write($self, $s); + msg_body_write($self, $msg); } sub cmd_head ($;$) { my ($self, $art) = @_; my $r = art_lookup($self, $art, 2); return $r unless ref $r; - my ($n, $mid, $s) = @$r; + my ($n, $mid, undef, $hdr) = @$r; set_art($self, $art); more($self, "221 $n <$mid> article retrieved - head follows"); - msg_more($self, _header($s)); + msg_more($self, _header($hdr)); '.' } @@ -577,17 +574,17 @@ sub cmd_body ($;$) { my ($self, $art) = @_; my $r = art_lookup($self, $art, 0); return $r unless ref $r; - my ($n, $mid, $s) = @$r; + my ($n, $mid, $msg) = @$r; set_art($self, $art); more($self, "222 $n <$mid> article retrieved - body follows"); - simple_body_write($self, $s); + msg_body_write($self, $msg); } sub cmd_stat ($;$) { my ($self, $art) = @_; my $r = art_lookup($self, $art, 0); return $r unless ref $r; - my ($n, $mid, undef) = @$r; + my ($n, $mid) = @$r; set_art($self, $art); "223 $n <$mid> article retrieved - request text separately"; } @@ -815,7 +812,7 @@ sub hdr_mid_prefix ($$$$$) { } sub hdr_mid_response ($$$$$$) { - my ($self, $xhdr, $ng, $n, $mid, $v) = @_; # r: art_lookup result + my ($self, $xhdr, $ng, $n, $mid, $v) = @_; my $res = ''; if ($xhdr) { $res .= r221 . "\r\n";