]> Sergey Matveev's repositories - public-inbox.git/commitdiff
drop bodies and messages ASAP after processing
authorEric Wong <e@80x24.org>
Mon, 17 Aug 2015 02:41:18 +0000 (02:41 +0000)
committerEric Wong <e@80x24.org>
Mon, 17 Aug 2015 03:14:21 +0000 (03:14 +0000)
We can rely on reference counting to lower memory usage for
big messages.

lib/PublicInbox/Feed.pm
lib/PublicInbox/View.pm
t/view.t

index 226c50ea0eda2c499203e9222bc496f979db3989..95bde4f576bca18e788cbbdba0f07220ef026893 100644 (file)
@@ -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;
index 4f2833b3f4531aa7ad650bcff03d64da3d1ef069..55e12f261cb851517be1e596281b7a2356f39550 100644 (file)
@@ -116,6 +116,7 @@ sub index_entry {
                                  \$more);
                $part_nr++;
        });
+       $mime->body_set('');
 
        $rv .= "\n$pfx<a\nhref=\"$mhref\">$more</a> ";
        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;
 }
 
index 63de49bd43ef8c9bd8398ecb0177beda4e62b904..3107285c1dd0dbfb7e4c6cf7a937ca291db23f00 100644 (file)
--- 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!<a\nhref="\.\./m/hello%40!s, "MID link present");
@@ -52,7 +52,8 @@ EOF
 
        # short page
        my $pfx = "http://example.com/test/f";
-       my $short = PublicInbox::View->msg_html($s, $pfx);
+       $mime = Email::MIME->new($s);
+       my $short = PublicInbox::View->msg_html($mime, $pfx);
        like($short, qr!<a\nhref="hello%40!s, "MID link present");
        like($short, qr/\n&gt; keep this inline/,
                "short quoted text is inline");
@@ -137,8 +138,9 @@ EOF
                parts => $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");
 }