diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-07-21 14:28:54 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-07-21 14:28:54 (GMT) |
commit | 0bffc94d571bbd794a36aafc51ec649a26fe436f (patch) | |
tree | 023458ed84863d304c544d930ea70ae587a25655 /Modules | |
parent | 38d773bd106d644df7509634dea6ce6ff691561b (diff) | |
download | cpython-0bffc94d571bbd794a36aafc51ec649a26fe436f.zip cpython-0bffc94d571bbd794a36aafc51ec649a26fe436f.tar.gz cpython-0bffc94d571bbd794a36aafc51ec649a26fe436f.tar.bz2 |
Issue #22018: signal.set_wakeup_fd() now raises an OSError instead of a
ValueError on fstat() failure.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/signalmodule.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index cf4ba61..c4f0121 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -437,12 +437,20 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args) return NULL; } #endif - if (fd != -1 && (!_PyVerify_fd(fd) || fstat(fd, &buf) != 0)) { - PyErr_SetString(PyExc_ValueError, "invalid fd"); - return NULL; + + if (fd != -1) { + if (!_PyVerify_fd(fd)) { + PyErr_SetString(PyExc_ValueError, "invalid fd"); + return NULL; + } + + if (fstat(fd, &buf) != 0) + return PyErr_SetFromErrno(PyExc_OSError); } + old_fd = wakeup_fd; wakeup_fd = fd; + return PyLong_FromLong(old_fd); } |