@@ -1992,59 +1992,55 @@ static PyMethodDef GcMethods[] = {
1992
1992
{NULL , NULL } /* Sentinel */
1993
1993
};
1994
1994
1995
- static struct PyModuleDef gcmodule = {
1996
- PyModuleDef_HEAD_INIT ,
1997
- "gc" , /* m_name */
1998
- gc__doc__ , /* m_doc */
1999
- -1 , /* m_size */
2000
- GcMethods , /* m_methods */
2001
- NULL , /* m_reload */
2002
- NULL , /* m_traverse */
2003
- NULL , /* m_clear */
2004
- NULL /* m_free */
2005
- };
2006
-
2007
- PyMODINIT_FUNC
2008
- PyInit_gc (void )
1995
+ static int
1996
+ gcmodule_exec (PyObject * module )
2009
1997
{
2010
1998
GCState * gcstate = get_gc_state ();
2011
1999
2012
- PyObject * m = PyModule_Create (& gcmodule );
2013
-
2014
- if (m == NULL ) {
2015
- return NULL ;
2016
- }
2017
-
2000
+ gcstate -> garbage = PyList_New (0 );
2018
2001
if (gcstate -> garbage == NULL ) {
2019
- gcstate -> garbage = PyList_New (0 );
2020
- if (gcstate -> garbage == NULL ) {
2021
- return NULL ;
2022
- }
2002
+ return -1 ;
2023
2003
}
2024
- Py_INCREF (gcstate -> garbage );
2025
- if (PyModule_AddObject (m , "garbage" , gcstate -> garbage ) < 0 ) {
2026
- return NULL ;
2004
+ if (PyModule_AddObjectRef (module , "garbage" , gcstate -> garbage ) < 0 ) {
2005
+ return -1 ;
2027
2006
}
2028
2007
2008
+ gcstate -> callbacks = PyList_New (0 );
2029
2009
if (gcstate -> callbacks == NULL ) {
2030
- gcstate -> callbacks = PyList_New (0 );
2031
- if (gcstate -> callbacks == NULL ) {
2032
- return NULL ;
2033
- }
2010
+ return -1 ;
2034
2011
}
2035
- Py_INCREF (gcstate -> callbacks );
2036
- if (PyModule_AddObject (m , "callbacks" , gcstate -> callbacks ) < 0 ) {
2037
- return NULL ;
2012
+ if (PyModule_AddObjectRef (module , "callbacks" , gcstate -> callbacks ) < 0 ) {
2013
+ return -1 ;
2038
2014
}
2039
2015
2040
- #define ADD_INT (NAME ) if (PyModule_AddIntConstant(m , #NAME, NAME) < 0) { return NULL ; }
2016
+ #define ADD_INT (NAME ) if (PyModule_AddIntConstant(module , #NAME, NAME) < 0) { return -1 ; }
2041
2017
ADD_INT (DEBUG_STATS );
2042
2018
ADD_INT (DEBUG_COLLECTABLE );
2043
2019
ADD_INT (DEBUG_UNCOLLECTABLE );
2044
2020
ADD_INT (DEBUG_SAVEALL );
2045
2021
ADD_INT (DEBUG_LEAK );
2046
2022
#undef ADD_INT
2047
- return m ;
2023
+ return 0 ;
2024
+ }
2025
+
2026
+ static PyModuleDef_Slot gcmodule_slots [] = {
2027
+ {Py_mod_exec , gcmodule_exec },
2028
+ {0 , NULL }
2029
+ };
2030
+
2031
+ static struct PyModuleDef gcmodule = {
2032
+ PyModuleDef_HEAD_INIT ,
2033
+ .m_name = "gc" ,
2034
+ .m_doc = gc__doc__ ,
2035
+ .m_size = 0 , /* special case, state is part of interpreter state */
2036
+ .m_methods = GcMethods ,
2037
+ .m_slots = gcmodule_slots
2038
+ };
2039
+
2040
+ PyMODINIT_FUNC
2041
+ PyInit_gc (void )
2042
+ {
2043
+ return PyModuleDef_Init (& gcmodule );
2048
2044
}
2049
2045
2050
2046
/* Public API to invoke gc.collect() from C */
0 commit comments