diff options
| author | bwarsaw | 1999-01-13 23:53:26 +0000 |
|---|---|---|
| committer | bwarsaw | 1999-01-13 23:53:26 +0000 |
| commit | 957f44a429df2aa42c0105925776e9b364d1f23a (patch) | |
| tree | 8b39bd2ad1f1f0ee826b4a3fdf2b223704b7b791 /Mailman/Deliverer.py | |
| parent | 133beef3878b9274bce991a400eac18f8b582bc3 (diff) | |
| download | mailman-957f44a429df2aa42c0105925776e9b364d1f23a.tar.gz mailman-957f44a429df2aa42c0105925776e9b364d1f23a.tar.zst mailman-957f44a429df2aa42c0105925776e9b364d1f23a.zip | |
On some RedHat Linuxes, there appears to be a problem with some crons
messing up their SIGCHLD handling. This would manifest as an IOError
getting raised in the cmdproc.close() call of DeliverToList() in
Deliverer.py. Thanks go Harald Meland for describing the real problem
and giving the real fix. Thanks go to Greg Stein for testing this
patch and verifying that it works.
Deliverer.DeliverToList(): Undo previously checked in patch, which
simply wrapped a try/except around the cmdproc.close() call and
ignored errno=10 IOErrors. This was treating the symptoms, not the
cause.
All files in cron/: Added Harald's work around of the Linux bug by
including these lines in every file:
# Work around known problems with some RedHat cron daemons
import signal
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
It helps RedHat and doesn't appear to hurt on e.g. Solaris.
Diffstat (limited to 'Mailman/Deliverer.py')
| -rw-r--r-- | Mailman/Deliverer.py | 17 |
1 files changed, 1 insertions, 16 deletions
diff --git a/Mailman/Deliverer.py b/Mailman/Deliverer.py index f01142844..83e35fa15 100644 --- a/Mailman/Deliverer.py +++ b/Mailman/Deliverer.py @@ -170,22 +170,7 @@ class Deliverer: if footer: cmdproc.write(footer) - # TBD: this potentially masks a real bug. We have been getting - # several reports from Linux users that this line is raising the - # following exception: - # - # IOError: (10, 'No child processes') - # - # I don't know how this can happen, I can't reproduce it on Solaris, - # and it doesn't seem to affect anything. So I'm chalking it up to a - # harmless Linux artifact that we can safely ignore. - try: - status = cmdproc.close() - except IOError, (code, msg): - if errcode <> errno.ECHILD: - Utils.reraise() - # otherwise just ignore it - status = 0 + status = cmdproc.close() if status: self.LogMsg('deliverer', 'Non-zero exit status: %d\nCommand: %s', |
