You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2005/04/12 04:59:39 UTC

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',
 
 );