From c6d0b5eeb023e7429105cfa4383d5d6605bf4a08 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 25 Feb 2022 12:34:00 +0100 Subject: [PATCH] bpo-1635741: Fix winreg reference leaks (GH-31560) Clear also the PyHKEY_Type static type at exit. --- Objects/object.c | 8 ++++++++ PC/winreg.c | 4 ---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Objects/object.c b/Objects/object.c index 3044c862fb9dac..77a457223764a7 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1825,6 +1825,11 @@ _PyTypes_InitState(PyInterpreterState *interp) } + +#ifdef MS_WINDOWS +extern PyTypeObject PyHKEY_Type; +#endif + static PyTypeObject* static_types[] = { // The two most important base types: must be initialized first and // deallocated last. @@ -1869,6 +1874,9 @@ static PyTypeObject* static_types[] = { &PyFunction_Type, &PyGen_Type, &PyGetSetDescr_Type, +#ifdef MS_WINDOWS + &PyHKEY_Type, +#endif &PyInstanceMethod_Type, &PyListIter_Type, &PyListRevIter_Type, diff --git a/PC/winreg.c b/PC/winreg.c index 004a89a5355f6c..2d44c82000c682 100644 --- a/PC/winreg.c +++ b/PC/winreg.c @@ -2046,11 +2046,9 @@ PyMODINIT_FUNC PyInit_winreg(void) PyHKEY_Type.tp_doc = PyHKEY_doc; if (PyType_Ready(&PyHKEY_Type) < 0) return NULL; - Py_INCREF(&PyHKEY_Type); if (PyDict_SetItemString(d, "HKEYType", (PyObject *)&PyHKEY_Type) != 0) return NULL; - Py_INCREF(PyExc_OSError); if (PyDict_SetItemString(d, "error", PyExc_OSError) != 0) return NULL; @@ -2116,5 +2114,3 @@ PyMODINIT_FUNC PyInit_winreg(void) ADD_INT(REG_RESOURCE_REQUIREMENTS_LIST); return m; } - -