bpo-38037: Fix reference counters in signal module (GH-15753) · python/cpython@b150d0b
@@ -1329,7 +1329,7 @@ static struct PyModuleDef signalmodule = {
13291329PyMODINIT_FUNC
13301330PyInit__signal(void)
13311331{
1332-PyObject *m, *d, *x;
1332+PyObject *m, *d;
13331333int i;
1334133413351335/* Create the module and add the functions */
@@ -1350,13 +1350,17 @@ PyInit__signal(void)
13501350/* Add some symbolic constants to the module */
13511351d = PyModule_GetDict(m);
135213521353-x = DefaultHandler = PyLong_FromVoidPtr((void *)SIG_DFL);
1354-if (PyModule_AddObject(m, "SIG_DFL", x))
1353+DefaultHandler = PyLong_FromVoidPtr((void *)SIG_DFL);
1354+if (!DefaultHandler ||
1355+PyDict_SetItemString(d, "SIG_DFL", DefaultHandler) < 0) {
13551356 goto finally;
1357+ }
135613581357-x = IgnoreHandler = PyLong_FromVoidPtr((void *)SIG_IGN);
1358-if (PyModule_AddObject(m, "SIG_IGN", x))
1359+IgnoreHandler = PyLong_FromVoidPtr((void *)SIG_IGN);
1360+if (!IgnoreHandler ||
1361+PyDict_SetItemString(d, "SIG_IGN", IgnoreHandler) < 0) {
13591362 goto finally;
1363+ }
1360136413611365if (PyModule_AddIntMacro(m, NSIG))
13621366 goto finally;
@@ -1374,8 +1378,8 @@ PyInit__signal(void)
13741378 goto finally;
13751379#endif
137613801377-x = IntHandler = PyDict_GetItemString(d, "default_int_handler");
1378-if (!x)
1381+IntHandler = PyDict_GetItemString(d, "default_int_handler");
1382+if (!IntHandler)
13791383 goto finally;
13801384Py_INCREF(IntHandler);
13811385@@ -1568,8 +1572,10 @@ PyInit__signal(void)
15681572#if defined (HAVE_SETITIMER) || defined (HAVE_GETITIMER)
15691573ItimerError = PyErr_NewException("signal.ItimerError",
15701574PyExc_OSError, NULL);
1571-if (PyModule_AddObject(m, "ItimerError", ItimerError))
1575+if (!ItimerError ||
1576+PyDict_SetItemString(d, "ItimerError", ItimerError) < 0) {
15721577 goto finally;
1578+ }
15731579#endif
1574158015751581#ifdef CTRL_C_EVENT
@@ -1615,6 +1621,9 @@ finisignal(void)
16151621Py_CLEAR(IntHandler);
16161622Py_CLEAR(DefaultHandler);
16171623Py_CLEAR(IgnoreHandler);
1624+#ifdef HAVE_GETITIMER
1625+Py_CLEAR(ItimerError);
1626+#endif
16181627}
1619162816201629