@@ -381,55 +381,56 @@ PyDoc_STRVAR(queue_module_doc,
381
381
"C implementation of the Python queue module.\n\
382
382
This module is an implementation detail, please do not use it directly." );
383
383
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 )
397
386
{
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 );
407
388
state -> EmptyError = PyErr_NewExceptionWithDoc (
408
389
"_queue.Empty" ,
409
390
"Exception raised by Queue.get(block=0)/get_nowait()." ,
410
391
NULL , NULL );
411
- if (state -> EmptyError == NULL )
412
- goto error ;
392
+ if (state -> EmptyError == NULL ) {
393
+ return -1 ;
394
+ }
413
395
414
396
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 ;
418
400
}
419
401
420
- state -> SimpleQueueType = (PyTypeObject * )PyType_FromModuleAndSpec (m ,
421
- & simplequeue_spec ,
422
- NULL );
402
+ state -> SimpleQueueType = (PyTypeObject * )PyType_FromModuleAndSpec (
403
+ module , & simplequeue_spec , NULL );
423
404
if (state -> SimpleQueueType == NULL ) {
424
- goto error ;
405
+ return -1 ;
425
406
}
426
- if (PyModule_AddType (m , state -> SimpleQueueType ) < 0 ) {
427
- goto error ;
407
+ if (PyModule_AddType (module , state -> SimpleQueueType ) < 0 ) {
408
+ return -1 ;
428
409
}
429
410
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
+ };
431
430
432
- error :
433
- Py_DECREF (m );
434
- return NULL ;
431
+
432
+ PyMODINIT_FUNC
433
+ PyInit__queue (void )
434
+ {
435
+ return PyModuleDef_Init (& queuemodule );
435
436
}
0 commit comments