Mailing List Archive

svn commit: r437474 - in /spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin: PerMsgStatus.pm Plugin/Rule2XSBody.pm
Author: jm
Date: Sun Aug 27 15:52:11 2006
New Revision: 437474

URL: http://svn.apache.org/viewvc?rev=437474&view=rev
Log:
optimisation: avoid checking rule-is-disabled hashtable during the hot-spot body loop if the rule is re2xs-enabled

Modified:
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PerMsgStatus.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Rule2XSBody.pm

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PerMsgStatus.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PerMsgStatus.pm?rev=437474&r1=437473&r2=437474&view=diff
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PerMsgStatus.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/PerMsgStatus.pm Sun Aug 27 15:52:11 2006
@@ -1925,20 +1925,21 @@
permsgstatus => $self, ruletype => "body",
priority => '.$priority.', lines => \@_
});
- my $disabled = $self->{skip_body_rules};

';

+ while (my($rulename, $pat) = each %{$self->{conf}{body_tests}->{$priority}}) {

+ if (!$self->{conf}{skip_body_rules}{$rulename}) {

- while (my($rulename, $pat) = each %{$self->{conf}{body_tests}->{$priority}}) {
- $evalstr .= '
- if (!$disabled->{q{'.$rulename.'}} && $scoresptr->{q{'.$rulename.'}})
- {
- '.$rulename.'_body_test($self,@_);
- '.$self->ran_rule_plugin_code($rulename, "body").'
- }
- ';
+ $evalstr .= '
+ if ($scoresptr->{q{'.$rulename.'}}) {
+ '.$rulename.'_body_test($self,@_);
+ '.$self->ran_rule_plugin_code($rulename, "body").'
+ }
+ ';
+
+ }

if ($doing_user_rules) {
next if (!$self->is_user_rule_sub ($rulename.'_body_test'));
@@ -1957,14 +1958,13 @@
}
}

-
sub '.$rulename.'_one_line_body_test {
pos $_[1] = 0;
'.$self->hash_line_for_rule($rulename).'
while ($_[1] =~ '.$pat.'g) {
my $self = $_[0];
$self->got_hit(q{'.$rulename.'}, "BODY: ", ruletype => "body");
- '.$self->hit_rule_plugin_code($rulename, "re2xs-body", "return").'
+ '.$self->hit_rule_plugin_code($rulename,"one-line-body","return").'
}
}
';

Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Rule2XSBody.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Rule2XSBody.pm?rev=437474&r1=437473&r2=437474&view=diff
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Rule2XSBody.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/Rule2XSBody.pm Sun Aug 27 15:52:11 2006
@@ -90,6 +90,8 @@
return 0;
}

+ $conf->{skip_body_rules} = { };
+
my $found = 0;
foreach my $name (keys %{$rules}) {
my $rule = $rules->{$name};
@@ -105,7 +107,7 @@

# TODO: need a cleaner way to do this. I expect when rule types
# are implementable in plugins, I can do it that way
- $conf->{zoom_disable_basic_regexp_rule}->{$name} = 1;
+ $conf->{skip_body_rules}->{$name} = 1;
$found++;
}

@@ -139,8 +141,6 @@
my $conf = $scanner->{conf};
return unless $conf->{zoom_ruletypes_available}->{$ruletype};

- $scanner->{skip_body_rules} = $conf->{zoom_disable_basic_regexp_rule};
-
dbg("zoom: run_body_hack for $ruletype start");

my $do_dbg = (would_log('dbg', 'zoom') > 1);
@@ -166,9 +166,9 @@
# ignore 0-scored rules, of course
next unless $scoresptr->{$rulename};

- if ($do_dbg) {
- dbg("zoom: base found for $rulename: $line");
- }
+ # if ($do_dbg) {
+ # dbg("zoom: base found for $rulename: $line");
+ # }

# run the real regexp -- on this line alone
&{'Mail::SpamAssassin::PerMsgStatus::'.$rulename.'_one_line_body_test'}