Hi, I found a series of minor memory leak. minor because they only occurs in situations where a call like PyDict_SetItemString of PyModule_AddObject fails which means things are already pretty bad anyway. Nevertheless here is the bug description: In "color.c" in the "MODINIT_DEFINE (color)" function at the end the "apiobj" leaks if the call to "PyDict_SetItemString" fails. In "font.c" and "mask.c" the "apiobj" leaks if the call to "PyModule_AddObject" fails. Note that normally "PyModule_AddObject" steals a reference, but it only does so on success. In "pixelarray.c" the leaking object is "PyPixelArray_Type" also with the failing call to "PyModule_AddObject".
I attached a patch. yours //Lorenz
Index: src/font.c =================================================================== --- src/font.c (revision 2356) +++ src/font.c (working copy) @@ -806,6 +806,7 @@ MODINIT_ERROR; } if (PyModule_AddObject (module, PYGAMEAPI_LOCAL_ENTRY, apiobj) == -1) { + Py_DECREF (apiobj); DECREF_MOD (module); MODINIT_ERROR; } Index: src/color.c =================================================================== --- src/color.c (revision 2356) +++ src/color.c (working copy) @@ -1608,7 +1608,6 @@ { PyObject *colordict; PyObject *module; - PyObject *dict; PyObject *apiobj; static void* c_api[PYGAMEAPI_COLOR_NUMSLOTS]; @@ -1677,7 +1676,6 @@ DECREF_MOD(module); MODINIT_ERROR; } - dict = PyModule_GetDict (module); c_api[0] = &PyColor_Type; c_api[1] = PyColor_New; @@ -1689,11 +1687,11 @@ DECREF_MOD(module); MODINIT_ERROR; } - if (PyDict_SetItemString (dict, PYGAMEAPI_LOCAL_ENTRY, apiobj)) { + if (PyModule_AddObject (module, PYGAMEAPI_LOCAL_ENTRY, apiobj)) { + Py_DECREF (apiobj); Py_DECREF (_COLORDICT); DECREF_MOD(module); MODINIT_ERROR; } - Py_DECREF (apiobj); MODINIT_RETURN (module); } Index: src/pixelarray.c =================================================================== --- src/pixelarray.c (revision 2356) +++ src/pixelarray.c (working copy) @@ -2164,6 +2164,7 @@ if (PyModule_AddObject (module, "PixelArray", (PyObject *) &PyPixelArray_Type) == -1) { + Py_DECREF ((PyObject *) &PyPixelArray_Type); DECREF_MOD (module); MODINIT_ERROR; } Index: src/mask.c =================================================================== --- src/mask.c (revision 2356) +++ src/mask.c (working copy) @@ -1538,6 +1538,7 @@ MODINIT_ERROR; } if (PyModule_AddObject (module, PYGAMEAPI_LOCAL_ENTRY, apiobj) == -1) { + Py_DECREF (apiobj); DECREF_MOD (module); MODINIT_ERROR; }