diff --git a/src/pEpmodule.cc b/src/pEpmodule.cc index bb53a1b..b848b1e 100644 --- a/src/pEpmodule.cc +++ b/src/pEpmodule.cc @@ -1,5 +1,4 @@ #include "pEpmodule.hh" -#include #include namespace pEp { @@ -13,14 +12,21 @@ namespace pEp { return PyUnicode_FromString(version.c_str()); } } + + void module_free(void *) + { + release(session); + } } +using namespace pEp; + PyMODINIT_FUNC PyInit_pEp(void) { - PEP_SESSION session; PEP_STATUS status = init(&session); if (status != PEP_STATUS_OK) return NULL; return PyModule_Create(&pEpmodule); } + diff --git a/src/pEpmodule.hh b/src/pEpmodule.hh index d5cdda6..85f8c75 100644 --- a/src/pEpmodule.hh +++ b/src/pEpmodule.hh @@ -1,4 +1,5 @@ #include +#include namespace pEp { namespace PythonAdapter { @@ -6,20 +7,32 @@ namespace pEp { PyObject *about(PyObject *self, PyObject *args); } -} -static PyMethodDef pEpMethods[] = { - {"about", pEp::PythonAdapter::about, METH_VARARGS, "about p≡p"}, - {NULL, NULL, 0, NULL} -}; - -static struct PyModuleDef pEpmodule = { - PyModuleDef_HEAD_INIT, - "pEp", - NULL, - -1, - pEpMethods -}; + void module_free(void *); + + struct module_state { + PEP_SESSION session; + }; + + struct PyMethodDef pEpMethods[] = { + {"about", pEp::PythonAdapter::about, METH_VARARGS, "about p≡p"}, + {NULL, NULL, 0, NULL} + }; + + struct PyModuleDef pEpmodule = { + PyModuleDef_HEAD_INIT, + "pEp", + "p≡p Python adapter", + -1, + pEpMethods, + NULL, + NULL, + NULL, + pEp::module_free + }; + + PEP_SESSION session; +} PyMODINIT_FUNC PyInit_pEp(void);