@@ -105,18 +105,6 @@ typedef struct {
105
105
};
106
106
} OverlappedObject ;
107
107
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
-
120
108
121
109
static inline void
122
110
steal_buffer (Py_buffer * dst , Py_buffer * src )
@@ -1996,28 +1984,6 @@ static PyMethodDef overlapped_functions[] = {
1996
1984
{NULL }
1997
1985
};
1998
1986
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
-
2021
1987
#define WINAPI_CONSTANT (fmt , con ) \
2022
1988
do { \
2023
1989
PyObject *value = Py_BuildValue(fmt, con); \
@@ -2045,14 +2011,15 @@ overlapped_exec(PyObject *module)
2045
2011
return -1 ;
2046
2012
}
2047
2013
2048
- OverlappedState * st = overlapped_get_state (module );
2049
- st -> overlapped_type = (PyTypeObject * )PyType_FromModuleAndSpec (
2014
+ PyTypeObject * overlapped_type = (PyTypeObject * )PyType_FromModuleAndSpec (
2050
2015
module , & overlapped_type_spec , NULL );
2051
- if (st -> overlapped_type == NULL ) {
2016
+ if (overlapped_type == NULL ) {
2052
2017
return -1 ;
2053
2018
}
2054
2019
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 ) {
2056
2023
return -1 ;
2057
2024
}
2058
2025
@@ -2077,14 +2044,10 @@ static PyModuleDef_Slot overlapped_slots[] = {
2077
2044
};
2078
2045
2079
2046
static struct PyModuleDef overlapped_module = {
2080
- PyModuleDef_HEAD_INIT ,
2047
+ . m_base = PyModuleDef_HEAD_INIT ,
2081
2048
.m_name = "_overlapped" ,
2082
- .m_size = sizeof (OverlappedState ),
2083
2049
.m_methods = overlapped_functions ,
2084
2050
.m_slots = overlapped_slots ,
2085
- .m_traverse = overlapped_traverse ,
2086
- .m_clear = overlapped_clear ,
2087
- .m_free = overlapped_free
2088
2051
};
2089
2052
2090
2053
PyMODINIT_FUNC
0 commit comments