[Python-checkins] bpo-1635741: Port _contextvars module to multiphase initialization (PEP 489) (GH-18374)
Hai Shi
webhook-mailer at python.org
Mon Feb 17 08:49:34 EST 2020
https://github.com/python/cpython/commit/7d7956833cc37a9d42807cbfeb7dcc041970f579
commit: 7d7956833cc37a9d42807cbfeb7dcc041970f579
branch: master
author: Hai Shi <shihai1992 at gmail.com>
committer: GitHub <noreply at 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);
}
More information about the Python-checkins
mailing list