From 819802da9926535714acf2bffe690b04f90cb12b Mon Sep 17 00:00:00 2001 From: Nils Berg Date: Wed, 11 Dec 2019 15:01:45 +0000 Subject: [PATCH] Fix a memory leak when creating Python3 modules. (#2019) --- include/pybind11/pybind11.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/pybind11/pybind11.h b/include/pybind11/pybind11.h index d95d61f7b..8e9c55d1a 100644 --- a/include/pybind11/pybind11.h +++ b/include/pybind11/pybind11.h @@ -794,11 +794,16 @@ public: explicit module(const char *name, const char *doc = nullptr) { if (!options::show_user_defined_docstrings()) doc = nullptr; #if PY_MAJOR_VERSION >= 3 - PyModuleDef *def = new PyModuleDef(); + PyModuleDef *def = PyMem_New(PyModuleDef, 1); std::memset(def, 0, sizeof(PyModuleDef)); def->m_name = name; def->m_doc = doc; def->m_size = -1; + def->m_free = [](void* module ) { + if (module != nullptr) { + Py_XDECREF(PyModule_GetDef((PyObject*) module)); + } + }; Py_INCREF(def); m_ptr = PyModule_Create(def); #else