◐ Shell
clean mode source ↗

[3.8] bpo-38323: Add guard clauses in MultiLoopChildWatcher. (GH-22756) by miss-islington · Pull Request #23807 · python/cpython

Expand Up @@ -1152,13 +1152,15 @@ def is_active(self):
def close(self): self._callbacks.clear() if self._saved_sighandler is not None: handler = signal.getsignal(signal.SIGCHLD) if handler != self._sig_chld: logger.warning("SIGCHLD handler was changed by outside code") else: signal.signal(signal.SIGCHLD, self._saved_sighandler) self._saved_sighandler = None if self._saved_sighandler is None: return
handler = signal.getsignal(signal.SIGCHLD) if handler != self._sig_chld: logger.warning("SIGCHLD handler was changed by outside code") else: signal.signal(signal.SIGCHLD, self._saved_sighandler) self._saved_sighandler = None
def __enter__(self): return self Expand All @@ -1185,15 +1187,17 @@ def attach_loop(self, loop): # The reason to do it here is that attach_loop() is called from # unix policy only for the main thread. # Main thread is required for subscription on SIGCHLD signal if self._saved_sighandler is not None: return
self._saved_sighandler = signal.signal(signal.SIGCHLD, self._sig_chld) if self._saved_sighandler is None: self._saved_sighandler = signal.signal(signal.SIGCHLD, self._sig_chld) if self._saved_sighandler is None: logger.warning("Previous SIGCHLD handler was set by non-Python code, " "restore to default handler on watcher close.") self._saved_sighandler = signal.SIG_DFL logger.warning("Previous SIGCHLD handler was set by non-Python code, " "restore to default handler on watcher close.") self._saved_sighandler = signal.SIG_DFL
# Set SA_RESTART to limit EINTR occurrences. signal.siginterrupt(signal.SIGCHLD, False) # Set SA_RESTART to limit EINTR occurrences. signal.siginterrupt(signal.SIGCHLD, False)
def _do_waitpid_all(self): for pid in list(self._callbacks): Expand Down