summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorHai Shi <shihai1992@gmail.com>2020-02-17 13:49:26 (GMT)
committerGitHub <noreply@github.com>2020-02-17 13:49:26 (GMT)
commit7d7956833cc37a9d42807cbfeb7dcc041970f579 (patch)
treecf27e4ff635f0a78665d17cd9b9bdeb0b5a90100 /Modules
parent3d235f5c5c5bce6e0caec44d2ce17f670c2ca2d7 (diff)
downloadcpython-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.c55
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);
}