1818
1919#include "Python.h"
2020
21+ // --- HMAC module state ------------------------------------------------------
22+
23+ typedef struct hmacmodule_state {
24+ } hmacmodule_state ;
25+
26+ static inline hmacmodule_state *
27+ get_hmacmodule_state (PyObject * module )
28+ {
29+ void * state = PyModule_GetState (module );
30+ assert (state != NULL );
31+ return (hmacmodule_state * )state ;
32+ }
33+
2134// --- HMAC module clinic configuration ---------------------------------------
2235
2336/*[clinic input]
@@ -33,7 +46,36 @@ static PyMethodDef hmacmodule_methods[] = {
3346
3447// --- HMAC module initialization and finalization functions ------------------
3548
49+ static int
50+ hmacmodule_exec (PyObject * module )
51+ {
52+ hmacmodule_state * state = get_hmacmodule_state (module );
53+ return 0 ;
54+ }
55+
56+ static int
57+ hmacmodule_traverse (PyObject * mod , visitproc visit , void * arg )
58+ {
59+ Py_VISIT (Py_TYPE (mod ));
60+ hmacmodule_state * state = get_hmacmodule_state (mod );
61+ return 0 ;
62+ }
63+
64+ static int
65+ hmacmodule_clear (PyObject * mod )
66+ {
67+ hmacmodule_state * state = get_hmacmodule_state (mod );
68+ return 0 ;
69+ }
70+
71+ static inline void
72+ hmacmodule_free (void * mod )
73+ {
74+ (void )hmacmodule_clear ((PyObject * )mod );
75+ }
76+
3677static struct PyModuleDef_Slot hmacmodule_slots [] = {
78+ {Py_mod_exec , hmacmodule_exec },
3779 {Py_mod_multiple_interpreters , Py_MOD_PER_INTERPRETER_GIL_SUPPORTED },
3880 {Py_mod_gil , Py_MOD_GIL_NOT_USED },
3981 {0 , NULL } /* sentinel */
@@ -45,6 +87,9 @@ static struct PyModuleDef _hmacmodule = {
4587 .m_size = sizeof (hmacmodule_state ),
4688 .m_methods = hmacmodule_methods ,
4789 .m_slots = hmacmodule_slots ,
90+ .m_traverse = hmacmodule_traverse ,
91+ .m_clear = hmacmodule_clear ,
92+ .m_free = hmacmodule_free ,
4893};
4994
5095PyMODINIT_FUNC
0 commit comments