mirror of https://github.com/python/cpython
gh-116448: Handle errors correctly in `os_waitid_impl` in `posixmodule` (#116449)
This commit is contained in:
parent
808a77612f
commit
882fcede83
|
@ -9732,15 +9732,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…
Reference in New Issue