Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7a6dea1

Browse files
committed
bpo-1635741: Port _queue to multiphase initialization
Signed-off-by: Christian Heimes <[email protected]>
1 parent fa2eee9 commit 7a6dea1

File tree

2 files changed

+39
-37
lines changed

2 files changed

+39
-37
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Port _queue extension module to multiphase initialization (:pep:`489`)

Modules/_queuemodule.c

+38-37
Original file line numberDiff line numberDiff line change
@@ -381,55 +381,56 @@ PyDoc_STRVAR(queue_module_doc,
381381
"C implementation of the Python queue module.\n\
382382
This module is an implementation detail, please do not use it directly.");
383383

384-
static struct PyModuleDef queuemodule = {
385-
.m_base = PyModuleDef_HEAD_INIT,
386-
.m_name = "_queue",
387-
.m_doc = queue_module_doc,
388-
.m_size = sizeof(simplequeue_state),
389-
.m_traverse = queue_traverse,
390-
.m_clear = queue_clear,
391-
.m_free = queue_free,
392-
};
393-
394-
395-
PyMODINIT_FUNC
396-
PyInit__queue(void)
384+
static int
385+
queuemodule_exec(PyObject *module)
397386
{
398-
PyObject *m;
399-
simplequeue_state *state;
400-
401-
/* Create the module */
402-
m = PyModule_Create(&queuemodule);
403-
if (m == NULL)
404-
return NULL;
405-
406-
state = simplequeue_get_state(m);
387+
simplequeue_state *state = simplequeue_get_state(module);
407388
state->EmptyError = PyErr_NewExceptionWithDoc(
408389
"_queue.Empty",
409390
"Exception raised by Queue.get(block=0)/get_nowait().",
410391
NULL, NULL);
411-
if (state->EmptyError == NULL)
412-
goto error;
392+
if (state->EmptyError == NULL) {
393+
return -1;
394+
}
413395

414396
Py_INCREF(state->EmptyError);
415-
if (PyModule_AddObject(m, "Empty", state->EmptyError) < 0) {
416-
Py_DECREF(state->EmptyError);
417-
goto error;
397+
if (PyModule_AddObject(module, "Empty", state->EmptyError) < 0) {
398+
Py_CLEAR(state->EmptyError);
399+
return -1;
418400
}
419401

420-
state->SimpleQueueType = (PyTypeObject *)PyType_FromModuleAndSpec(m,
421-
&simplequeue_spec,
422-
NULL);
402+
state->SimpleQueueType = (PyTypeObject *)PyType_FromModuleAndSpec(
403+
module, &simplequeue_spec, NULL);
423404
if (state->SimpleQueueType == NULL) {
424-
goto error;
405+
return -1;
425406
}
426-
if (PyModule_AddType(m, state->SimpleQueueType) < 0) {
427-
goto error;
407+
if (PyModule_AddType(module, state->SimpleQueueType) < 0) {
408+
return -1;
428409
}
429410

430-
return m;
411+
return 0;
412+
}
413+
414+
static PyModuleDef_Slot queuemodule_slots[] = {
415+
{Py_mod_exec, queuemodule_exec},
416+
{0, NULL}
417+
};
418+
419+
420+
static struct PyModuleDef queuemodule = {
421+
.m_base = PyModuleDef_HEAD_INIT,
422+
.m_name = "_queue",
423+
.m_doc = queue_module_doc,
424+
.m_size = sizeof(simplequeue_state),
425+
.m_slots = queuemodule_slots,
426+
.m_traverse = queue_traverse,
427+
.m_clear = queue_clear,
428+
.m_free = queue_free,
429+
};
431430

432-
error:
433-
Py_DECREF(m);
434-
return NULL;
431+
432+
PyMODINIT_FUNC
433+
PyInit__queue(void)
434+
{
435+
return PyModuleDef_Init(&queuemodule);
435436
}

0 commit comments

Comments
 (0)