@@ -381,11 +381,46 @@ 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 int
385
+ queuemodule_exec (PyObject * module )
386
+ {
387
+ simplequeue_state * state = simplequeue_get_state (module );
388
+
389
+ state -> EmptyError = PyErr_NewExceptionWithDoc (
390
+ "_queue.Empty" ,
391
+ "Exception raised by Queue.get(block=0)/get_nowait()." ,
392
+ NULL , NULL );
393
+ if (state -> EmptyError == NULL ) {
394
+ return -1 ;
395
+ }
396
+ if (PyModule_AddObjectRef (module , "Empty" , state -> EmptyError ) < 0 ) {
397
+ return -1 ;
398
+ }
399
+
400
+ state -> SimpleQueueType = (PyTypeObject * )PyType_FromModuleAndSpec (
401
+ module , & simplequeue_spec , NULL );
402
+ if (state -> SimpleQueueType == NULL ) {
403
+ return -1 ;
404
+ }
405
+ if (PyModule_AddType (module , state -> SimpleQueueType ) < 0 ) {
406
+ return -1 ;
407
+ }
408
+
409
+ return 0 ;
410
+ }
411
+
412
+ static PyModuleDef_Slot queuemodule_slots [] = {
413
+ {Py_mod_exec , queuemodule_exec },
414
+ {0 , NULL }
415
+ };
8000
td>
416
+
417
+
384
418
static struct PyModuleDef queuemodule = {
385
419
.m_base = PyModuleDef_HEAD_INIT ,
386
420
.m_name = "_queue" ,
387
421
.m_doc = queue_module_doc ,
388
422
.m_size = sizeof (simplequeue_state ),
423
+ .m_slots = queuemodule_slots ,
389
424
.m_traverse = queue_traverse ,
390
425
.m_clear = queue_clear ,
391
426
.m_free = queue_free ,
@@ -395,41 +430,5 @@ static struct PyModuleDef queuemodule = {
395
430
PyMODINIT_FUNC
396
431
PyInit__queue (void )
397
432
{
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 );
407
- state -> EmptyError = PyErr_NewExceptionWithDoc (
408
- "_queue.Empty" ,
409
- "Exception raised by Queue.get(block=0)/get_nowait()." ,
410
- NULL , NULL );
411
- if (state -> EmptyError == NULL )
412
- goto error ;
413
-
414
- Py_INCREF (state -> EmptyError );
415
- if (PyModule_AddObject (m , "Empty" , state -> EmptyError ) < 0 ) {
416
- Py_DECREF (state -> EmptyError );
417
- goto error ;
418
- }
419
-
420
- state -> SimpleQueueType = (PyTypeObject * )PyType_FromModuleAndSpec (m ,
421
- & simplequeue_spec ,
422
- NULL );
423
- if (state -> SimpleQueueType == NULL ) {
424
- goto error ;
425
- }
426
- if (PyModule_AddType (m , state -> SimpleQueueType ) < 0 ) {
427
- goto error ;
428
- }
429
-
430
- return m ;
431
-
432
- error :
433
- Py_DECREF (m );
434
- return NULL ;
433
+ return PyModuleDef_Init (& queuemodule );
435
434
}
0 commit comments