mirror of
https://github.com/python/cpython.git
synced 2025-12-09 18:48:05 +00:00
Issue #22018: signal.set_wakeup_fd() now raises an OSError instead of a
ValueError on fstat() failure.
This commit is contained in:
parent
38d773bd10
commit
0bffc94d57
3 changed files with 17 additions and 6 deletions
|
|
@ -252,14 +252,14 @@ class WakeupFDTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_invalid_fd(self):
|
def test_invalid_fd(self):
|
||||||
fd = support.make_bad_fd()
|
fd = support.make_bad_fd()
|
||||||
self.assertRaises(ValueError, signal.set_wakeup_fd, fd)
|
self.assertRaises(OSError, signal.set_wakeup_fd, fd)
|
||||||
|
|
||||||
def test_set_wakeup_fd_result(self):
|
def test_set_wakeup_fd_result(self):
|
||||||
r1, w1 = os.pipe()
|
r1, w1 = os.pipe()
|
||||||
os.close(r1)
|
self.addCleanup(os.close, r1)
|
||||||
self.addCleanup(os.close, w1)
|
self.addCleanup(os.close, w1)
|
||||||
r2, w2 = os.pipe()
|
r2, w2 = os.pipe()
|
||||||
os.close(r2)
|
self.addCleanup(os.close, r2)
|
||||||
self.addCleanup(os.close, w2)
|
self.addCleanup(os.close, w2)
|
||||||
|
|
||||||
signal.set_wakeup_fd(w1)
|
signal.set_wakeup_fd(w1)
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #22018: signal.set_wakeup_fd() now raises an OSError instead of a
|
||||||
|
ValueError on ``fstat()`` failure.
|
||||||
|
|
||||||
- Issue #21044: tarfile.open() now handles fileobj with an integer 'name'
|
- Issue #21044: tarfile.open() now handles fileobj with an integer 'name'
|
||||||
attribute. Based on patch by Martin Panter.
|
attribute. Based on patch by Martin Panter.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -437,12 +437,20 @@ signal_set_wakeup_fd(PyObject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (fd != -1 && (!_PyVerify_fd(fd) || fstat(fd, &buf) != 0)) {
|
|
||||||
PyErr_SetString(PyExc_ValueError, "invalid fd");
|
if (fd != -1) {
|
||||||
return NULL;
|
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;
|
old_fd = wakeup_fd;
|
||||||
wakeup_fd = fd;
|
wakeup_fd = fd;
|
||||||
|
|
||||||
return PyLong_FromLong(old_fd);
|
return PyLong_FromLong(old_fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue