File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -179,6 +179,44 @@ LDAPerror(PyObject *m, LDAP *l)
179179 return LDAPraise_for_message (m , l , NULL );
180180}
181181
182+ /* GC protocol for heap types */
183+ int
184+ LDAPMod_traverse (PyObject * m , visitproc visit , void * arg )
185+ {
186+ LDAPModState * state = PyModule_GetState (m );
187+ size_t i = 0 ;
188+
189+ Py_VISIT (state -> ldap_type );
190+ Py_VISIT (state -> exception_class );
191+ for ( ; i < sizeof (state -> errobjects )/sizeof (state -> errobjects [0 ]); i ++ ) {
192+ Py_VISIT (state -> errobjects [i ]);
193+ }
194+
195+ return 0 ;
196+ }
197+
198+ int
199+ LDAPMod_clear (PyObject * m )
200+ {
201+ LDAPModState * state = PyModule_GetState (m );
202+ size_t i = 0 ;
203+
204+ Py_CLEAR (state -> ldap_type );
205+ Py_CLEAR (state -> exception_class );
206+ for ( ; i < sizeof (state -> errobjects )/sizeof (state -> errobjects [0 ]); i ++ ) {
207+ Py_CLEAR (state -> errobjects [i ]);
208+ }
209+
210+ return 0 ;
211+ }
212+
213+ /* destructor */
214+ void
215+ LDAPMod_free (void * m )
216+ {
217+ LDAPMod_clear (m );
218+ }
219+
182220/* initialise the module constants */
183221
184222int
Original file line number Diff line number Diff line change @@ -67,6 +67,9 @@ static struct PyModuleDef ldap_moduledef = {
6767 .m_size = sizeof (LDAPModState ),
6868 .m_methods = ldap_functions ,
6969 .m_slots = ldap_slots ,
70+ .m_traverse = LDAPMod_traverse ,
71+ .m_clear = LDAPMod_clear ,
72+ .m_free = LDAPMod_free ,
7073};
7174struct PyModuleDef * LDAPMod_moduledef ;
7275
Original file line number Diff line number Diff line change @@ -119,6 +119,11 @@ typedef struct LDAPModState {
119119 PyObject * errobjects [LDAP_ERROR_MAX - LDAP_ERROR_MIN + 1 ];
120120} LDAPModState ;
121121
122+ /* *** module level state *** */
123+ PYLDAP_FUNC (int ) LDAPMod_traverse (PyObject * , visitproc , void * );
124+ PYLDAP_FUNC (int ) LDAPMod_clear (PyObject * );
125+ PYLDAP_FUNC (void ) LDAPMod_free (void * );
126+
122127/* *** ldapcontrol *** */
123128PYLDAP_FUNC (void ) LDAPControl_List_DEL (LDAPControl * * );
124129PYLDAP_FUNC (int ) LDAPControls_from_object (PyObject * , LDAPControl * * * );
You can’t perform that action at this time.
0 commit comments