# HG changeset patch # User Miro HronĨok # Date 1524655710 -7200 # Wed Apr 25 13:28:30 2018 +0200 # Branch issue33329 # Node ID 6501fdc3a80fa2bc3b8c70bfaf94a31c3b3432c0 # Parent a07f07034d281bec8c776f9e1ee7c5b9aea74007 Fix multiprocessing regression on newer glibcs Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom is commonly used to select all signals for blocking with `pthread_sigmask`. So we ignore the sigaddset() return value until we expose sigfillset() to provide a better idiom. Co-authored-by: Antoine Pitrou diff -r a07f07034d28 -r 6501fdc3a80f pypy/module/signal/interp_signal.py --- a/pypy/module/signal/interp_signal.py Tue Apr 24 10:00:00 2018 +0200 +++ b/pypy/module/signal/interp_signal.py Wed Apr 25 13:28:30 2018 +0200 @@ -379,10 +379,10 @@ for w_signum in space.unpackiterable(self.w_signals): signum = space.int_w(w_signum) check_signum_in_range(space, signum) - err = c_sigaddset(self.mask, signum) - if err: - raise oefmt(space.w_ValueError, - "signal number %d out of range", signum) + # bpo-33329: ignore c_sigaddset() return value as it can fail + # for some reserved signals, but we want the `range(1, NSIG)` + # idiom to allow selecting all valid signals. + c_sigaddset(self.mask, signum) return self.mask def __exit__(self, *args):