Mark, have you got a bug # for this change? it's core code, and it'd be nice to get an idea of how the issue arose.
--j. [EMAIL PROTECTED] writes: > Author: mmartinec > Date: Tue Dec 9 18:00:42 2008 > New Revision: 724958 > > URL: http://svn.apache.org/viewvc?rev=724958&view=rev > Log: > protect logger from being recursively re-entered on warn or die from within > logging > > Modified: > spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm > spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm > > Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm > URL: > http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm?rev=724958&r1=724957&r2=724958&view=diff > ============================================================================== > --- spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm (original) > +++ spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm Tue Dec 9 18:00:42 > 2008 > @@ -62,6 +62,7 @@ > > # global shared object > our %LOG_SA; > +our $LOG_ENTERED; # to avoid recursion on die or warn from within logging > > # defaults > $LOG_SA{level} = WARNING; # log info, warnings and errors > @@ -165,6 +166,9 @@ > $caller[0] =~ m#^Mail::SpamAssassin(?:$|::)#); > } > > + return if $LOG_ENTERED; # avoid recursion on die or warn from within > logging > + $LOG_ENTERED = 1; # no 'returns' from this point on, must clear the flag > + > my $message = join(" ", @message); > $message =~ s/[\r\n]+$//; # remove any trailing newlines > > @@ -178,6 +182,7 @@ > $object->log_message($level, $line); > } > } > + $LOG_ENTERED = 0; > } > > =item dbg("facility: message") > > Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm > URL: > http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm?rev=724958&r1=724957&r2=724958&view=diff > ============================================================================== > --- spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm (original) > +++ spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm Tue Dec 9 > 18:00:42 2008 > @@ -50,6 +50,7 @@ > sub log_message { > my ($self, $level, $msg) = @_; > > + local $SIG{PIPE} = 'IGNORE'; # don't signal on a failed write to a pipe > print STDERR "[$$] $level: $msg\n" > or warn "Error writing to log file: $!"; > }
