diff options
author | Hai Shi <shihai1992@gmail.com> | 2020-02-17 13:49:26 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-17 13:49:26 (GMT) |
commit | 7d7956833cc37a9d42807cbfeb7dcc041970f579 (patch) | |
tree | cf27e4ff635f0a78665d17cd9b9bdeb0b5a90100 /Modules | |
parent | 3d235f5c5c5bce6e0caec44d2ce17f670c2ca2d7 (diff) | |
download | cpython-7d7956833cc37a9d42807cbfeb7dcc041970f579.zip cpython-7d7956833cc37a9d42807cbfeb7dcc041970f579.tar.gz cpython-7d7956833cc37a9d42807cbfeb7dcc041970f579.tar.bz2 |
bpo-1635741: Port _contextvars module to multiphase initialization (PEP 489) (GH-18374)
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_contextvarsmodule.c | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/Modules/_contextvarsmodule.c b/Modules/_contextvarsmodule.c index 1abcdbf..d6d7f37 100644 --- a/Modules/_contextvarsmodule.c +++ b/Modules/_contextvarsmodule.c @@ -27,33 +27,15 @@ static PyMethodDef _contextvars_methods[] = { {NULL, NULL} }; -static struct PyModuleDef _contextvarsmodule = { - PyModuleDef_HEAD_INIT, /* m_base */ - "_contextvars", /* m_name */ - module_doc, /* m_doc */ - -1, /* m_size */ - _contextvars_methods, /* m_methods */ - NULL, /* m_slots */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL, /* m_free */ -}; - -PyMODINIT_FUNC -PyInit__contextvars(void) +static int +_contextvars_exec(PyObject *m) { - PyObject *m = PyModule_Create(&_contextvarsmodule); - if (m == NULL) { - return NULL; - } - Py_INCREF(&PyContext_Type); if (PyModule_AddObject(m, "Context", (PyObject *)&PyContext_Type) < 0) { Py_DECREF(&PyContext_Type); - Py_DECREF(m); - return NULL; + return -1; } Py_INCREF(&PyContextVar_Type); @@ -61,8 +43,7 @@ PyInit__contextvars(void) (PyObject *)&PyContextVar_Type) < 0) { Py_DECREF(&PyContextVar_Type); - Py_DECREF(m); - return NULL; + return -1; } Py_INCREF(&PyContextToken_Type); @@ -70,9 +51,31 @@ PyInit__contextvars(void) (PyObject *)&PyContextToken_Type) < 0) { Py_DECREF(&PyContextToken_Type); - Py_DECREF(m); - return NULL; + return -1; } - return m; + return 0; +} + +static struct PyModuleDef_Slot _contextvars_slots[] = { + {Py_mod_exec, _contextvars_exec}, + {0, NULL} +}; + +static struct PyModuleDef _contextvarsmodule = { + PyModuleDef_HEAD_INIT, /* m_base */ + "_contextvars", /* m_name */ + module_doc, /* m_doc */ + 0, /* m_size */ + _contextvars_methods, /* m_methods */ + _contextvars_slots, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + +PyMODINIT_FUNC +PyInit__contextvars(void) +{ + return PyModuleDef_Init(&_contextvarsmodule); } |