summaryrefslogtreecommitdiff
path: root/Modules/signalmodule.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-07-21 16:28:54 +0200
committerVictor Stinner <victor.stinner@gmail.com>2014-07-21 16:28:54 +0200
commit0bffc94d571bbd794a36aafc51ec649a26fe436f (patch)
tree023458ed84863d304c544d930ea70ae587a25655 /Modules/signalmodule.c
parent38d773bd106d644df7509634dea6ce6ff691561b (diff)
downloadcpython-git-0bffc94d571bbd794a36aafc51ec649a26fe436f.tar.gz
Issue #22018: signal.set_wakeup_fd() now raises an OSError instead of a
ValueError on fstat() failure.
Diffstat (limited to 'Modules/signalmodule.c')
-rw-r--r--Modules/signalmodule.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index cf4ba6123a..c4f0121644 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);
}