Mailing List Archive

svn commit: r161011 - in spamassassin/trunk: lib/Mail/SpamAssassin.pm lib/Mail/SpamAssassin/Message/Metadata/Received.pm lib/Mail/SpamAssassin/Plugin.pm t/data/testplugin.pm t/plugin_file.t
Author: jm
Date: Mon Apr 11 19:59:38 2005
New Revision: 161011

URL: http://svn.apache.org/viewcvs?view=rev&rev=161011
Log:
bug 4218: per_msg_finish plugin API was not being called due to some misuse of a PerMsgStatus object in the received-header parser. moved the misused object into Mail::SpamAssassin so that it stays around for the entire factory's lifecycle and avoid creation/destruction thrashing that way, and also fix this bug

Modified:
spamassassin/trunk/lib/Mail/SpamAssassin.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Message/Metadata/Received.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin.pm
spamassassin/trunk/t/data/testplugin.pm
spamassassin/trunk/t/plugin_file.t

Modified: spamassassin/trunk/lib/Mail/SpamAssassin.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin.pm?view=diff&r1=161010&r2=161011
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin.pm Mon Apr 11 19:59:38 2005
@@ -270,6 +270,13 @@

$self->create_locker();

+ # argh. this is only used to perform DNS lookups in
+ # Mail::SpamAssassin::Message::Metadata::Received. TODO! we need to get
+ # Dns.pm code into a class that is NOT part of
+ # Mail::SpamAssassin::PerMsgStatus to avoid this crap!
+ my $tmpmsg = $self->parse([ ], 1);
+ $self->{parser_dns_pms} = Mail::SpamAssassin::PerMsgStatus->new($self, $tmpmsg);
+
$self;
}

@@ -1262,6 +1269,7 @@
sub finish {
my ($self) = @_;

+ $self->{parser_dns_pms}->finish();
$self->{conf}->finish(); delete $self->{conf};
$self->{plugins}->finish(); delete $self->{plugins};


Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Message/Metadata/Received.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Message/Metadata/Received.pm?view=diff&r1=161010&r2=161011
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Message/Metadata/Received.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Message/Metadata/Received.pm Mon Apr 11 19:59:38 2005
@@ -59,7 +59,7 @@
# argh. this is only used to perform DNS lookups.
# TODO! we need to get Dns.pm code into a class that is NOT
# part of Mail::SpamAssassin::PerMsgStatus to avoid this crap!
- $self->{dns_pms} = Mail::SpamAssassin::PerMsgStatus->new($main, $msg);
+ $self->{dns_pms} = $main->{parser_dns_pms};
$self->{is_dns_available} = $self->{dns_pms}->is_dns_available();

$self->{relays_trusted} = [ ];
@@ -270,7 +270,6 @@
@{$self->{relays_untrusted}});

# drop the temp PerMsgStatus object
- $self->{dns_pms}->finish();
delete $self->{dns_pms};

# OK, we've now split the relay list into trusted and untrusted.

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin.pm?view=diff&r1=161010&r2=161011
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin.pm Mon Apr 11 19:59:38 2005
@@ -414,6 +414,11 @@
destroyed, and any per-scan context held on that object by this
plugin should be destroyed as well.

+Normally, any member variables on the C<PerMsgStatus> object will be cleaned up
+automatically -- but if your plugin has made a circular reference on that
+object, this is the place to break them so that garbage collection can operate
+correctly.
+
=over 4

=item permsgstatus

Modified: spamassassin/trunk/t/data/testplugin.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/t/data/testplugin.pm?view=diff&r1=161010&r2=161011
==============================================================================
--- spamassassin/trunk/t/data/testplugin.pm (original)
+++ spamassassin/trunk/t/data/testplugin.pm Mon Apr 11 19:59:38 2005
@@ -40,4 +40,10 @@
return 1;
}

+sub per_msg_finish {
+ my ($self, $permsgstatus) = @_;
+ print "myTestPlugin finishing: $self\n";
+ return 1;
+}
+
1;

Modified: spamassassin/trunk/t/plugin_file.t
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/t/plugin_file.t?view=diff&r1=161010&r2=161011
==============================================================================
--- spamassassin/trunk/t/plugin_file.t (original)
+++ spamassassin/trunk/t/plugin_file.t Mon Apr 11 19:59:38 2005
@@ -2,7 +2,7 @@

use lib '.'; use lib 't';
use SATest; sa_t_init("plugin_file");
-use Test; BEGIN { plan tests => 6 };
+use Test; BEGIN { plan tests => 7 };

# ---------------------------------------------------------------------------

@@ -12,6 +12,7 @@
q{ MY_TEST_PLUGIN }, 'plugin_called',
q{ registered myTestPlugin }, 'registered',
q{ myTestPlugin eval test called }, 'test_called',
+q{ myTestPlugin finishing }, 'plugin_finished',

);