You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by he...@apache.org on 2018/10/01 14:58:24 UTC

svn commit: r1842511 - in /spamassassin/trunk/lib/Mail/SpamAssassin: PerMsgStatus.pm Plugin/Razor2.pm

Author: hege
Date: Mon Oct  1 14:58:23 2018
New Revision: 1842511

URL: http://svn.apache.org/viewvc?rev=1842511&view=rev
Log:
Prevent DESTROY block firing on exiting helper process, also use _exit()

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Razor2.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm?rev=1842511&r1=1842510&r2=1842511&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm Mon Oct  1 14:58:23 2018
@@ -309,8 +309,12 @@ sub new {
 
 sub DESTROY {
   my ($self) = shift;
-  local $@;
-  eval { $self->delete_fulltext_tmpfile() };  # Bug 5808
+
+  # Ignore exiting helper processes (razor_fork etc)
+  if (!$self->{main}->{is_forked_helper_process}) {
+    local $@;
+    eval { $self->delete_fulltext_tmpfile() };  # Bug 5808
+  }
 }
 
 ###########################################################################

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Razor2.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Razor2.pm?rev=1842511&r1=1842510&r2=1842511&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Razor2.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Razor2.pm Mon Oct  1 14:58:23 2018
@@ -50,7 +50,7 @@ use warnings;
 use re 'taint';
 
 use Storable;
-use POSIX qw(PIPE_BUF WNOHANG);
+use POSIX qw(PIPE_BUF WNOHANG _exit);
 
 our @ISA = qw(Mail::SpamAssassin::Plugin);
 
@@ -432,6 +432,8 @@ sub check_razor2 {
 
   my $pid = fork();
   if (!$pid) {
+    # Must be set so DESTROY blocks etc can ignore us when exiting
+    $pms->{main}->{is_forked_helper_process} = 1;
     dbg("razor2: child process $$ forked");
     $pms->{razor2_backchannel}->setup_backchannel_child_post_fork();
     (undef, my @results) =
@@ -442,12 +444,12 @@ sub check_razor2 {
     };
     if ($@) {
       dbg("razor2: child return value freeze failed: $@");
-      exit;
+      _exit(0); # prevent touching filehandles as per perlfork(1)
     }
     if (!syswrite($pms->{razor2_backchannel}->{parent}, $backmsg)) {
       dbg("razor2: child backchannel write failed: $!");
     }
-    exit;
+    _exit(0); # prevent touching filehandles as per perlfork(1)
   }
 
   eval {