diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-09-09 14:42:35 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-09 14:42:35 (GMT) |
commit | b150d0bf1bb4c3203bb3293625e32aed01b25887 (patch) | |
tree | f1bf39c2fed9ca217f37b5a94d1d4022d2927f6f /Modules | |
parent | 44729c9f5198211faf533da49fa0fa26693a1993 (diff) | |
download | cpython-b150d0bf1bb4c3203bb3293625e32aed01b25887.zip cpython-b150d0bf1bb4c3203bb3293625e32aed01b25887.tar.gz cpython-b150d0bf1bb4c3203bb3293625e32aed01b25887.tar.bz2 |
bpo-38037: Fix reference counters in signal module (GH-15753)
(cherry picked from commit 77643c486fd22d8030e0d82c13012684b4ab6df1)
Co-authored-by: animalize <animalize@users.noreply.github.com>
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/signalmodule.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 7698984..9aca705 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -1329,7 +1329,7 @@ static struct PyModuleDef signalmodule = { PyMODINIT_FUNC PyInit__signal(void) { - PyObject *m, *d, *x; + PyObject *m, *d; int i; /* Create the module and add the functions */ @@ -1350,13 +1350,17 @@ PyInit__signal(void) /* Add some symbolic constants to the module */ d = PyModule_GetDict(m); - x = DefaultHandler = PyLong_FromVoidPtr((void *)SIG_DFL); - if (PyModule_AddObject(m, "SIG_DFL", x)) + DefaultHandler = PyLong_FromVoidPtr((void *)SIG_DFL); + if (!DefaultHandler || + PyDict_SetItemString(d, "SIG_DFL", DefaultHandler) < 0) { goto finally; + } - x = IgnoreHandler = PyLong_FromVoidPtr((void *)SIG_IGN); - if (PyModule_AddObject(m, "SIG_IGN", x)) + IgnoreHandler = PyLong_FromVoidPtr((void *)SIG_IGN); + if (!IgnoreHandler || + PyDict_SetItemString(d, "SIG_IGN", IgnoreHandler) < 0) { goto finally; + } if (PyModule_AddIntMacro(m, NSIG)) goto finally; @@ -1374,8 +1378,8 @@ PyInit__signal(void) goto finally; #endif - x = IntHandler = PyDict_GetItemString(d, "default_int_handler"); - if (!x) + IntHandler = PyDict_GetItemString(d, "default_int_handler"); + if (!IntHandler) goto finally; Py_INCREF(IntHandler); @@ -1568,8 +1572,10 @@ PyInit__signal(void) #if defined (HAVE_SETITIMER) || defined (HAVE_GETITIMER) ItimerError = PyErr_NewException("signal.ItimerError", PyExc_OSError, NULL); - if (PyModule_AddObject(m, "ItimerError", ItimerError)) + if (!ItimerError || + PyDict_SetItemString(d, "ItimerError", ItimerError) < 0) { goto finally; + } #endif #ifdef CTRL_C_EVENT @@ -1615,6 +1621,9 @@ finisignal(void) Py_CLEAR(IntHandler); Py_CLEAR(DefaultHandler); Py_CLEAR(IgnoreHandler); +#ifdef HAVE_GETITIMER + Py_CLEAR(ItimerError); +#endif } |