bpo-1635741: Port _contextvars module to multiphase initialization (PEP 489) (GH-18374)
https://github.com/python/cpython/commit/7d7956833cc37a9d42807cbfeb7dcc04197... commit: 7d7956833cc37a9d42807cbfeb7dcc041970f579 branch: master author: Hai Shi <shihai1992@gmail.com> committer: GitHub <noreply@github.com> date: 2020-02-17T14:49:26+01:00 summary: bpo-1635741: Port _contextvars module to multiphase initialization (PEP 489) (GH-18374) files: A Misc/NEWS.d/next/Core and Builtins/2020-02-06-09-00-35.bpo-1635741.oaxe1j.rst M Modules/_contextvarsmodule.c diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-06-09-00-35.bpo-1635741.oaxe1j.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-06-09-00-35.bpo-1635741.oaxe1j.rst new file mode 100644 index 0000000000000..49336f02a3e40 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-02-06-09-00-35.bpo-1635741.oaxe1j.rst @@ -0,0 +1 @@ +Port _contextvars extension module to multiphase initialization (:pep:`489`). \ No newline at end of file diff --git a/Modules/_contextvarsmodule.c b/Modules/_contextvarsmodule.c index 1abcdbfa921c2..d6d7f375d1230 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); }
participants (1)
-
Hai Shi