STINNER Victor <[email protected]> added the comment:
This issue is a Python 3.8 regression.
Joannah: Would you mind to have a look?
x = DefaultHandler = PyLong_FromVoidPtr((void *)SIG_DFL);
if (PyModule_AddObject(m, "SIG_DFL", x))
goto finally;
This change is not easy to read.
DefaultHandler must be a strong reference: finisignal() calls
Py_CLEAR(DefaultHandler);
Previously, the code uses PyDict_SetItemString(d, "SIG_DFL", x):
PyDict_SetItemString increases the reference counter, whereas
PyModule_AddObject leaves the reference counter unchanged (yeah, it's a
strange/bad C API).
I guess than an INCREF() is needed somewhere.
Compare it to:
int
PyModule_AddIntConstant(PyObject *m, const char *name, long value)
{
PyObject *o = PyLong_FromLong(value);
if (!o)
return -1;
if (PyModule_AddObject(m, name, o) == 0)
return 0;
Py_DECREF(o);
return -1;
}
----------
nosy: +lukasz.langa, vstinner
priority: normal -> release blocker
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue38037>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com