keep graceful shutdown from interrupting workers

When the signal.siginterrupt call is available it can be used to make
interrupted system calls (errno == EINTR) retry transparently whenever
they have not caused any side effects yet (e.g. no data read/written).
It should make shutdown more graceful.

Patch by Jonas Borgström
This commit is contained in:
Randall Leeds 2011-09-15 16:17:20 -07:00
parent ba730b1f18
commit 4633d1aad9
2 changed files with 6 additions and 0 deletions

1
THANKS
View File

@ -33,3 +33,4 @@ Masahiro Nakagawa <repeatedly@gmail.com>
Denis Bilenko <denis.bilenko@gmail.com>
Phil Schanely <phil@daylife.com>
Chris Lamb <lamby@debian.org>
Jonas Borgström <jonas@borgstrom.se>

View File

@ -110,6 +110,11 @@ class Worker(object):
signal.signal(signal.SIGINT, self.handle_exit)
signal.signal(signal.SIGWINCH, self.handle_winch)
signal.signal(signal.SIGUSR1, self.handle_usr1)
# Don't let SIGQUIT and SIGUSR1 disturb active requests
# by interrupting system calls
if hasattr(signal, 'siginterrupt'): # python >= 2.6
signal.siginterrupt(signal.SIGQUIT, False)
signal.siginterrupt(signal.SIGUSR1, False)
def handle_usr1(self, sig, frame):
self.log.reopen_files()