Actually, I just remembered sys.exitfunc! I can set that up to unlock a locked list automatically at interpreter exit. I don't want it to implicitly save the list though -- you'll still have to do that manually if you fiddle with it from the interpreter prompt.
Note that this function doesn't run if the interpreter exits because of a signal or os._exit() call.
Regarding signals: Some time back, I occasionally received reports from my users that some list, while its web admin interface was being accessed, suddenly got unresponsive for a period of time that matched the lock lifetime pretty well.
There were no entries/backtraces in logs/error, but I sometimes saw list lock files left lying around, and upon checking their contents found that their creating process was now gone.
I suspect this is what happened:
Web browser connects to Mailman.
Web browser for some reason closes its side of the connection before Mailman has given any response.
When Mailman tries to print out its response, it receives a SIGPIPE.
I tried fixing the problem with this patch:
RCS file: /projects/cvsroot/mailman/scripts/driver,v retrieving revision 1.19 diff -u -r1.19 driver --- driver 2000/04/06 19:30:38 1.19 +++ driver 2000/04/12 14:43:23 @@ -89,6 +89,13 @@ main() finally: sys.stderr = sys.__stderr__
except IOError, e:
if e.errno == errno.EPIPE:
# Log something
logger.write("EPIPE caught, ARGV=%s\n" % sys.argv)
raise except SystemExit: # this is a valid way for the function to exit pass
(Well, something like that patch anyway... :)
However, if my understanding of the problem is right, and this is the correct fix for it, I don't understand why the bare except: clause around the run_main() call in driver didn't kick in to produce a log entry...
Does anyone have any insight on how to properly avoid SIGPIPEs in python?
"HM" == Harald Meland Harald.Meland@usit.uio.no writes:
HM> However, if my understanding of the problem is right, and this HM> is the correct fix for it, I don't understand why the bare HM> except: clause around the run_main() call in driver didn't HM> kick in to produce a log entry...
Exactly. Does anybody have any more information they can provide about this?