From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-3.4 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, RP_MATCHES_RCVD shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: meta@public-inbox.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id B926E1F824 for ; Mon, 17 Aug 2015 03:38:24 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 8/9] drop bodies and messages ASAP after processing Date: Mon, 17 Aug 2015 03:38:16 +0000 Message-Id: <1439782697-16412-9-git-send-email-e@80x24.org> In-Reply-To: <1439782697-16412-1-git-send-email-e@80x24.org> References: <1439782697-16412-1-git-send-email-e@80x24.org> List-Id: We can rely on reference counting to lower memory usage for big messages. --- lib/PublicInbox/Feed.pm | 10 ++++++---- lib/PublicInbox/View.pm | 2 ++ t/view.t | 12 +++++++----- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index 226c50e..95bde4f 100644 --- a/lib/PublicInbox/Feed.pm +++ b/lib/PublicInbox/Feed.pm @@ -243,23 +243,25 @@ sub add_to_feed { my $midurl = $feed_opts->{midurl} || 'http://example.com/m/'; my $fullurl = $feed_opts->{fullurl} || 'http://example.com/f/'; - my $mid = $mime->header_obj->header_raw('Message-ID'); + my $header_obj = $mime->header_obj; + my $mid = $header_obj->header_raw('Message-ID'); defined $mid or return 0; $mid = PublicInbox::Hval->new_msgid($mid); my $href = $mid->as_href . '.html'; my $content = PublicInbox::View->feed_entry($mime, $fullurl . $href); defined($content) or return 0; + $mime = undef; - my $subject = mime_header($mime, 'Subject') or return 0; + my $subject = mime_header($header_obj, 'Subject') or return 0; - my $from = mime_header($mime, 'From') or return 0; + my $from = mime_header($header_obj, 'From') or return 0; my @from = Email::Address->parse($from); my $name = $from[0]->name; defined $name or $name = ""; my $email = $from[0]->address; defined $email or $email = ""; - my $date = $mime->header('Date'); + my $date = $header_obj->header('Date'); $date = PublicInbox::Hval->new_oneline($date); $date = feed_date($date->raw) or return 0; $add =~ tr!/!!d; diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 4f2833b..55e12f2 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -116,6 +116,7 @@ sub index_entry { \$more); $part_nr++; }); + $mime->body_set(''); $rv .= "\n$pfx$more "; my $txt = "${path}m/$href.txt"; @@ -277,6 +278,7 @@ sub multipart_text_as_html { $rv .= "\n" unless $rv =~ /\n\z/s; ++$part_nr; }); + $mime->body_set(''); $rv; } diff --git a/t/view.t b/t/view.t index 63de49b..3107285 100644 --- a/t/view.t +++ b/t/view.t @@ -39,9 +39,9 @@ EOF Subject => 'this is a subject', ], body => $body, - ); - $s = Email::MIME->new($s->as_string); - my $html = PublicInbox::View->msg_html($s); + )->as_string; + my $mime = Email::MIME->new($s); + my $html = PublicInbox::View->msg_html($mime); # ghetto tests like($html, qr!msg_html($s, $pfx); + $mime = Email::MIME->new($s); + my $short = PublicInbox::View->msg_html($mime, $pfx); like($short, qr! $parts, ); + my $orig = $mime->body_raw; my $html = PublicInbox::View->msg_html($mime); - like($mime->body_raw, qr/hi =3D bye=/, "our test used QP correctly"); + like($orig, qr/hi =3D bye=/, "our test used QP correctly"); like($html, qr/\bhi = bye\b/, "HTML output decoded QP"); } -- EW