[svn:qpsmtpd] rev 500 - branches/0.31/plugins/queue
[email protected] 12 Jul 2005 22:14:49 -0000
| Newsgroups | perl.cvs.qpsmtpd |
|---|---|
| Message-ID | <[email protected]> |
Author: msergeant
Date: Tue Jul 12 15:14:48 2005
New Revision: 500
Modified:
branches/0.31/plugins/queue/qmail-queue
Log:
MERGE 498:499 FROM https://svn.perl.org/qpsmtpd/trunk
Better fix for pipe being closed bug
Modified: branches/0.31/plugins/queue/qmail-queue
==============================================================================
--- branches/0.31/plugins/queue/qmail-queue (original)
+++ branches/0.31/plugins/queue/qmail-queue Tue Jul 12 15:14:48 2005
@@ -41,7 +41,8 @@ sub hook_queue {
# these bits inspired by Peter Samuels "qmail-queue wrapper"
pipe(MESSAGE_READER, MESSAGE_WRITER) or die("Could not create message pipe");
pipe(ENVELOPE_READER, ENVELOPE_WRITER) or die("Could not create envelope pipe");
-
+
+ local $SIG{PIPE} = sub { die "SIGPIPE" };
my $child = fork();
not defined $child and die("Could not fork");
@@ -55,10 +56,6 @@ sub hook_queue {
close MESSAGE_READER or die("close msg reader fault");
close ENVELOPE_READER or die("close envelope reader fault");
- # Note - technically there's a race here because if the exec() below
- # fails and the writes to MESSAGE_WRITER block we get a deadlocked process.
- # This check to see if(eof(PIPE)) will catch "most" of these problems.
- die "Message pipe has been closed" if eof(MESSAGE_WRITER);
$transaction->header->print(\*MESSAGE_WRITER);
$transaction->body_resetpos;
while (my $line = $transaction->body_getline) {
@@ -68,7 +65,6 @@ sub hook_queue {
my @rcpt = map { "T" . $_->address } $transaction->recipients;
my $from = "F".($transaction->sender->address|| "" );
- die "Envelope pipe has been closed" if eof(ENVELOPE_WRITER);
print ENVELOPE_WRITER "$from\0", join("\0",@rcpt), "\0\0"
or return(DECLINED,"Could not print addresses to queue");