@@ -105,18 +105,6 @@ typedef struct {
105105 };
106106} OverlappedObject ;
107107
108- typedef struct {
109- PyTypeObject * overlapped_type ;
110- } OverlappedState ;
111-
112- static inline OverlappedState *
113- overlapped_get_state (PyObject * module )
114- {
115- void * state = PyModule_GetState (module );
116- assert (state != NULL );
117- return (OverlappedState * )state ;
118- }
119-
120108
121109static inline void
122110steal_buffer (Py_buffer * dst , Py_buffer * src )
@@ -1996,28 +1984,6 @@ static PyMethodDef overlapped_functions[] = {
19961984 {NULL }
19971985};
19981986
1999- static int
2000- overlapped_traverse (PyObject * module , visitproc visit , void * arg )
2001- {
2002- OverlappedState * state = overlapped_get_state (module );
2003- Py_VISIT (state -> overlapped_type );
2004- return 0 ;
2005- }
2006-
2007- static int
2008- overlapped_clear (PyObject * module )
2009- {
2010- OverlappedState * state = overlapped_get_state (module );
2011- Py_CLEAR (state -> overlapped_type );
2012- return 0 ;
2013- }
2014-
2015- static void
2016- overlapped_free (void * module )
2017- {
2018- overlapped_clear ((PyObject * )module );
2019- }
2020-
20211987#define WINAPI_CONSTANT (fmt , con ) \
20221988 do { \
20231989 PyObject *value = Py_BuildValue(fmt, con); \
@@ -2045,14 +2011,15 @@ overlapped_exec(PyObject *module)
20452011 return -1 ;
20462012 }
20472013
2048- OverlappedState * st = overlapped_get_state (module );
2049- st -> overlapped_type = (PyTypeObject * )PyType_FromModuleAndSpec (
2014+ PyTypeObject * overlapped_type = (PyTypeObject * )PyType_FromModuleAndSpec (
20502015 module , & overlapped_type_spec , NULL );
2051- if (st -> overlapped_type == NULL ) {
2016+ if (overlapped_type == NULL ) {
20522017 return -1 ;
20532018 }
20542019
2055- if (PyModule_AddType (module , st -> overlapped_type ) < 0 ) {
2020+ int rc = PyModule_AddType (module , overlapped_type );
2021+ Py_DECREF (overlapped_type );
2022+ if (rc < 0 ) {
20562023 return -1 ;
20572024 }
20582025
@@ -2077,14 +2044,10 @@ static PyModuleDef_Slot overlapped_slots[] = {
20772044};
20782045
20792046static struct PyModuleDef overlapped_module = {
2080- PyModuleDef_HEAD_INIT ,
2047+ . m_base = PyModuleDef_HEAD_INIT ,
20812048 .m_name = "_overlapped" ,
2082- .m_size = sizeof (OverlappedState ),
20832049 .m_methods = overlapped_functions ,
20842050 .m_slots = overlapped_slots ,
2085- .m_traverse = overlapped_traverse ,
2086- .m_clear = overlapped_clear ,
2087- .m_free = overlapped_free
20882051};
20892052
20902053PyMODINIT_FUNC
0 commit comments