Skip to content

Commit c84c362

Browse files
committed
Fix a memory leak when creating Python3 modules.
1 parent fb910ae commit c84c362

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

include/pybind11/pybind11.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -794,12 +794,14 @@ class module : public object {
794794
explicit module(const char *name, const char *doc = nullptr) {
795795
if (!options::show_user_defined_docstrings()) doc = nullptr;
796796
#if PY_MAJOR_VERSION >= 3
797-
PyModuleDef *def = new PyModuleDef();
797+
static std::vector<PyModuleDef> m_defs;
798+
m_defs.emplace_back();
799+
PyModuleDef *def = &m_defs.back();
798800
std::memset(def, 0, sizeof(PyModuleDef));
801+
def->m_base = PyModuleDef_HEAD_INIT;
799802
def->m_name = name;
800803
def->m_doc = doc;
801804
def->m_size = -1;
802-
Py_INCREF(def);
803805
m_ptr = PyModule_Create(def);
804806
#else
805807
m_ptr = Py_InitModule3(name, nullptr, doc);

0 commit comments

Comments
 (0)