From 500d570c1765eeaa6ee8cba7d2af55031dfaab8c Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Thu, 5 Jun 2025 13:24:05 +0200 Subject: [PATCH 1/2] Use PyModuleDef.m_free in the example module xxlimited --- Modules/xxlimited.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index 26ac35734fb060..004d720af5d784 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -424,6 +424,12 @@ xx_clear(PyObject *module) return 0; } +static void +xx_free(void *module) +{ + (void)xx_clear((PyObject *)module); +} + static struct PyModuleDef xxmodule = { PyModuleDef_HEAD_INIT, .m_name = "xxlimited", @@ -433,9 +439,7 @@ static struct PyModuleDef xxmodule = { .m_slots = xx_slots, .m_traverse = xx_traverse, .m_clear = xx_clear, - /* m_free is not necessary here: xx_clear clears all references, - * and the module state is deallocated along with the module. - */ + .m_free = xx_free, }; From f89c4fb939f73a1c3e8165316de1a46a9e414994 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 6 Jun 2025 13:47:51 +0200 Subject: [PATCH 2/2] Update Modules/xxlimited.c Co-authored-by: neonene <53406459+neonene@users.noreply.github.com> --- Modules/xxlimited.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index 004d720af5d784..0480fb0849876b 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -427,6 +427,7 @@ xx_clear(PyObject *module) static void xx_free(void *module) { + // allow xx_modexec to omit calling xx_clear on error (void)xx_clear((PyObject *)module); }