gh-137490: Fix signal.sigwaitinfo() on NetBSD (GH-137523)

Handle ECANCELED in the same way as EINTR to work around the Posix
violation in the NetBSD's implementation.
This commit is contained in:
Serhiy Storchaka 2025-09-15 19:20:31 +03:00 committed by GitHub
parent fa12c6bae4
commit 07d0b95b05
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 9 additions and 1 deletions

View file

@ -1183,7 +1183,13 @@ signal_sigwaitinfo_impl(PyObject *module, sigset_t sigset)
err = sigwaitinfo(&sigset, &si);
Py_END_ALLOW_THREADS
} while (err == -1
&& errno == EINTR && !(async_err = PyErr_CheckSignals()));
&& (errno == EINTR
#if defined(__NetBSD__)
/* NetBSD's implementation violates POSIX by setting
* errno to ECANCELED instead of EINTR. */
|| errno == ECANCELED
#endif
) && !(async_err = PyErr_CheckSignals()));
if (err == -1)
return (!async_err) ? PyErr_SetFromErrno(PyExc_OSError) : NULL;