mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
[3.11] gh-116448: Handle errors correctly in os_waitid_impl in posixmodule (GH-116449) (#116453)
gh-116448: Handle errors correctly in `os_waitid_impl` in `posixmodule` (GH-116449)
(cherry picked from commit 882fcede83)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
parent
e89f2a0be1
commit
fa7f278583
1 changed files with 19 additions and 9 deletions
|
|
@ -8547,15 +8547,25 @@ os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options)
|
|||
if (!result)
|
||||
return NULL;
|
||||
|
||||
PyStructSequence_SET_ITEM(result, 0, PyLong_FromPid(si.si_pid));
|
||||
PyStructSequence_SET_ITEM(result, 1, _PyLong_FromUid(si.si_uid));
|
||||
PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong((long)(si.si_signo)));
|
||||
PyStructSequence_SET_ITEM(result, 3, PyLong_FromLong((long)(si.si_status)));
|
||||
PyStructSequence_SET_ITEM(result, 4, PyLong_FromLong((long)(si.si_code)));
|
||||
if (PyErr_Occurred()) {
|
||||
Py_DECREF(result);
|
||||
return NULL;
|
||||
}
|
||||
int pos = 0;
|
||||
|
||||
#define SET_RESULT(CALL) \
|
||||
do { \
|
||||
PyObject *item = (CALL); \
|
||||
if (item == NULL) { \
|
||||
Py_DECREF(result); \
|
||||
return NULL; \
|
||||
} \
|
||||
PyStructSequence_SET_ITEM(result, pos++, item); \
|
||||
} while(0)
|
||||
|
||||
SET_RESULT(PyLong_FromPid(si.si_pid));
|
||||
SET_RESULT(_PyLong_FromUid(si.si_uid));
|
||||
SET_RESULT(PyLong_FromLong((long)(si.si_signo)));
|
||||
SET_RESULT(PyLong_FromLong((long)(si.si_status)));
|
||||
SET_RESULT(PyLong_FromLong((long)(si.si_code)));
|
||||
|
||||
#undef SET_RESULT
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue