@@ -1377,77 +1377,63 @@ ITIMER_PROF -- decrements both when the process is executing and\n\
1377
1377
A signal handler function is called with two arguments:\n\
1378
1378
the first is the signal number, the second is the interrupted stack frame." );
1379
1379
1380
- static struct PyModuleDef signalmodule = {
1381
- PyModuleDef_HEAD_INIT ,
1382
- "_signal" ,
1383
- module_doc ,
1384
- -1 ,
1385
- signal_methods ,
1386
- NULL ,
1387
- NULL ,
1388
- NULL ,
1389
- NULL
1390
- };
1391
-
1392
- PyMODINIT_FUNC
1393
- PyInit__signal (void )
1394
- {
1395
- PyObject * m , * d ;
1396
- int i ;
1397
1380
1398
- /* Create the module and add the functions */
1399
- m = PyModule_Create (& signalmodule );
1400
- if (m == NULL )
1401
- return NULL ;
1402
1381
1382
+ static int
1383
+ signal_exec (PyObject * m )
1384
+ {
1385
+ /* add the functions */
1403
1386
#if defined(HAVE_SIGWAITINFO ) || defined(HAVE_SIGTIMEDWAIT )
1404
1387
if (!initialized ) {
1405
- if (PyStructSequence_InitType2 (& SiginfoType , & struct_siginfo_desc ) < 0 )
1406
- return NULL ;
1388
+ if (PyStructSequence_InitType2 (& SiginfoType , & struct_siginfo_desc ) < 0 ) {
1389
+ return -1 ;
1390
+ }
1391
+ }
1392
+
1393
+ if (PyModule_AddType (m , & SiginfoType ) < 0 ) {
1394
+ return -1 ;
1407
1395
}
1408
- Py_INCREF ((PyObject * ) & SiginfoType );
1409
- PyModule_AddObject (m , "struct_siginfo" , (PyObject * ) & SiginfoType );
1410
1396
initialized = 1 ;
1411
1397
#endif
1412
1398
1413
1399
/* Add some symbolic constants to the module */
1414
- d = PyModule_GetDict (m );
1400
+ PyObject * d = PyModule_GetDict (m );
1415
1401
1416
1402
DefaultHandler = PyLong_FromVoidPtr ((void * )SIG_DFL );
1417
1403
if (!DefaultHandler ||
1418
1404
PyDict_SetItemString (d , "SIG_DFL" , DefaultHandler ) < 0 ) {
1419
- goto finally ;
1405
+ return -1 ;
1420
1406
}
1421
1407
1422
1408
IgnoreHandler = PyLong_FromVoidPtr ((void * )SIG_IGN );
1423
1409
if (!IgnoreHandler ||
1424
1410
PyDict_SetItemString (d , "SIG_IGN" , IgnoreHandler ) < 0 ) {
1425
- goto finally ;
1411
+ return -1 ;
1426
1412
}
1427
1413
1428
1414
if (PyModule_AddIntMacro (m , NSIG ))
1429
- goto finally ;
1415
+ return -1 ;
1430
1416
1431
1417
#ifdef SIG_BLOCK
1432
1418
if (PyModule_AddIntMacro (m , SIG_BLOCK ))
1433
- goto finally ;
1419
+ return -1 ;
1434
1420
#endif
1435
1421
#ifdef SIG_UNBLOCK
1436
1422
if (PyModule_AddIntMacro (m , SIG_UNBLOCK ))
1437
- goto finally ;
1423
+ return -1 ;
1438
1424
#endif
1439
1425
#ifdef SIG_SETMASK
1440
1426
if (PyModule_AddIntMacro (m , SIG_SETMASK ))
1441
- goto finally ;
1427
+ return -1 ;
1442
1428
#endif
1443
1429
1444
1430
IntHandler = PyDict_GetItemString (d , "default_int_handler" );
1445
1431
if (!IntHandler )
1446
- goto finally ;
1432
+ return -1 ;
1447
1433
Py_INCREF (IntHandler );
1448
1434
1449
1435
_Py_atomic_store_relaxed (& Handlers [0 ].tripped , 0 );
1450
- for (i = 1 ; i < NSIG ; i ++ ) {
1436
+ for (int i = 1 ; i < NSIG ; i ++ ) {
1451
1437
void (* t )(int );
1452
1438
t = PyOS_getsig (i );
1453
1439
_Py_atomic_store_relaxed (& Handlers [i ].tripped , 0 );
@@ -1468,187 +1454,187 @@ PyInit__signal(void)
1468
1454
1469
1455
#ifdef SIGHUP
1470
1456
if (PyModule_AddIntMacro (m , SIGHUP ))
1471
- goto finally ;
1457
+ return -1 ;
1472
1458
#endif
1473
1459
#ifdef SIGINT
1474
1460
if (PyModule_AddIntMacro (m , SIGINT ))
1475
- goto finally ;
1461
+ return -1 ;
1476
1462
#endif
1477
1463
#ifdef SIGBREAK
1478
1464
if (PyModule_AddIntMacro (m , SIGBREAK ))
1479
- goto finally ;
1465
+ return -1 ;
1480
1466
#endif
1481
1467
#ifdef SIGQUIT
1482
1468
if (PyModule_AddIntMacro (m , SIGQUIT ))
1483
- goto finally ;
1469
+ return -1 ;
1484
1470
#endif
1485
1471
#ifdef SIGILL
1486
1472
if (PyModule_AddIntMacro (m , SIGILL ))
1487
- goto finally ;
1473
+ return -1 ;
1488
1474
#endif
1489
1475
#ifdef SIGTRAP
1490
1476
if (PyModule_AddIntMacro (m , SIGTRAP ))
1491
- goto finally ;
1477
+ return -1 ;
1492
1478
#endif
1493
1479
#ifdef SIGIOT
1494
1480
if (PyModule_AddIntMacro (m , SIGIOT ))
1495
- goto finally ;
1481
+ return -1 ;
1496
1482
#endif
1497
1483
#ifdef SIGABRT
1498
1484
if (PyModule_AddIntMacro (m , SIGABRT ))
1499
- goto finally ;
1485
+ return -1 ;
1500
1486
#endif
1501
1487
#ifdef SIGEMT
1502
1488
if (PyModule_AddIntMacro (m , SIGEMT ))
1503
- goto finally ;
1489
+ return -1 ;
1504
1490
#endif
1505
1491
#ifdef SIGFPE
1506
1492
if (PyModule_AddIntMacro (m , SIGFPE ))
1507
- goto finally ;
1493
+ return -1 ;
1508
1494
#endif
1509
1495
#ifdef SIGKILL
1510
1496
if (PyModule_AddIntMacro (m , SIGKILL ))
1511
- goto finally ;
1497
+ return -1 ;
1512
1498
#endif
1513
1499
#ifdef SIGBUS
1514
1500
if (PyModule_AddIntMacro (m , SIGBUS ))
1515
- goto finally ;
1501
+ return -1 ;
1516
1502
#endif
1517
1503
#ifdef SIGSEGV
1518
1504
if (PyModule_AddIntMacro (m , SIGSEGV ))
1519
- goto finally ;
1505
+ return -1 ;
1520
1506
#endif
1521
1507
#ifdef SIGSYS
1522
1508
if (PyModule_AddIntMacro (m , SIGSYS ))
1523
- goto finally ;
1509
+ return -1 ;
1524
1510
#endif
1525
1511
#ifdef SIGPIPE
1526
1512
if (PyModule_AddIntMacro (m , SIGPIPE ))
1527
- goto finally ;
1513
+ return -1 ;
1528
1514
#endif
1529
1515
#ifdef SIGALRM
1530
1516
if (PyModule_AddIntMacro (m , SIGALRM ))
1531
- goto finally ;
1517
+ return -1 ;
1532
1518
#endif
1533
1519
#ifdef SIGTERM
1534
1520
if (PyModule_AddIntMacro (m , SIGTERM ))
1535
- goto finally ;
1521
+ return -1 ;
1536
1522
#endif
1537
1523
#ifdef SIGUSR1
1538
1524
if (PyModule_AddIntMacro (m , SIGUSR1 ))
1539
- goto finally ;
1525
+ return -1 ;
1540
1526
#endif
1541
1527
#ifdef SIGUSR2
1542
1528
if (PyModule_AddIntMacro (m , SIGUSR2 ))
1543
- goto finally ;
1529
+ return -1 ;
1544
1530
#endif
1545
1531
#ifdef SIGCLD
1546
1532
if (PyModule_AddIntMacro (m , SIGCLD ))
1547
- goto finally ;
1533
+ return -1 ;
1548
1534
#endif
1549
1535
#ifdef SIGCHLD
1550
1536
if (PyModule_AddIntMacro (m , SIGCHLD ))
1551
- goto finally ;
1537
+ return -1 ;
1552
1538
#endif
1553
1539
#ifdef SIGPWR
1554
1540
if (PyModule_AddIntMacro (m , SIGPWR ))
1555
- goto finally ;
1541
+ return -1 ;
1556
1542
#endif
1557
1543
#ifdef SIGIO
1558
1544
if (PyModule_AddIntMacro (m , SIGIO ))
1559
- goto finally ;
1545
+ return -1 ;
1560
1546
#endif
1561
1547
#ifdef SIGURG
1562
1548
if (PyModule_AddIntMacro (m , SIGURG ))
1563
- goto finally ;
1549
+ return -1 ;
1564
1550
#endif
1565
1551
#ifdef SIGWINCH
1566
1552
if (PyModule_AddIntMacro (m , SIGWINCH ))
1567
- goto finally ;
1553
+ return -1 ;
1568
1554
#endif
1569
1555
#ifdef SIGPOLL
1570
1556
if (PyModule_AddIntMacro (m , SIGPOLL ))
1571
- goto finally ;
1557
+ return -1 ;
1572
1558
#endif
1573
1559
#ifdef SIGSTOP
1574
1560
if (PyModule_AddIntMacro (m , SIGSTOP ))
1575
- goto finally ;
1561
+ return -1 ;
1576
1562
#endif
1577
1563
#ifdef SIGTSTP
1578
1564
if (PyModule_AddIntMacro (m , SIGTSTP ))
1579
- goto finally ;
1565
+ return -1 ;
1580
1566
#endif
1581
1567
#ifdef SIGCONT
1582
1568
if (PyModule_AddIntMacro (m , SIGCONT ))
1583
- goto finally ;
1569
+ return -1 ;
1584
1570
#endif
1585
1571
#ifdef SIGTTIN
1586
1572
if (PyModule_AddIntMacro (m , SIGTTIN ))
1587
- goto finally ;
1573
+ return -1 ;
1588
1574
#endif
1589
1575
#ifdef SIGTTOU
1590
1576
if (PyModule_AddIntMacro (m , SIGTTOU ))
1591
- goto finally ;
1577
+ return -1 ;
1592
1578
#endif
1593
1579
#ifdef SIGVTALRM
1594
1580
if (PyModule_AddIntMacro (m , SIGVTALRM ))
1595
- goto finally ;
1581
+ return -1 ;
1596
1582
#endif
1597
1583
#ifdef SIGPROF
1598
1584
if (PyModule_AddIntMacro (m , SIGPROF ))
1599
- goto finally ;
1585
+ return -1 ;
1600
1586
#endif
1601
1587
#ifdef SIGXCPU
1602
1588
if (PyModule_AddIntMacro (m , SIGXCPU ))
1603
- goto finally ;
1589
+ return -1 ;
1604
1590
#endif
1605
1591
#ifdef SIGXFSZ
1606
1592
if (PyModule_AddIntMacro (m , SIGXFSZ ))
1607
- goto finally ;
1593
+ return -1 ;
1608
1594
#endif
1609
1595
#ifdef SIGRTMIN
1610
1596
if (PyModule_AddIntMacro (m , SIGRTMIN ))
1611
- goto finally ;
1597
+ return -1 ;
1612
1598
#endif
1613
1599
#ifdef SIGRTMAX
1614
1600
if (PyModule_AddIntMacro (m , SIGRTMAX ))
1615
- goto finally ;
1601
+ return -1 ;
1616
1602
#endif
1617
1603
#ifdef SIGINFO
1618
1604
if (PyModule_AddIntMacro (m , SIGINFO ))
1619
- goto finally ;
1605
+ return -1 ;
1620
1606
#endif
1621
1607
1622
1608
#ifdef ITIMER_REAL
1623
1609
if (PyModule_AddIntMacro (m , ITIMER_REAL ))
1624
- goto finally ;
1610
+ return -1 ;
1625
1611
#endif
1626
1612
#ifdef ITIMER_VIRTUAL
1627
1613
if (PyModule_AddIntMacro (m , ITIMER_VIRTUAL ))
1628
- goto finally ;
1614
+ return -1 ;
1629
1615
#endif
1630
1616
#ifdef ITIMER_PROF
1631
1617
if (PyModule_AddIntMacro (m , ITIMER_PROF ))
1632
- goto finally ;
1618
+ return -1 ;
1633
1619
#endif
1634
1620
1635
1621
#if defined (HAVE_SETITIMER ) || defined (HAVE_GETITIMER )
1636
1622
ItimerError = PyErr_NewException ("signal.ItimerError" ,
1637
1623
PyExc_OSError , NULL );
1638
1624
if (!ItimerError ||
1639
1625
PyDict_SetItemString (d , "ItimerError" , ItimerError ) < 0 ) {
1640
- goto finally ;
1626
+ return -1 ;
1641
1627
}
1642
1628
#endif
1643
1629
1644
1630
#ifdef CTRL_C_EVENT
1645
1631
if (PyModule_AddIntMacro (m , CTRL_C_EVENT ))
1646
- goto finally ;
1632
+ return -1 ;
1647
1633
#endif
1648
1634
1649
1635
#ifdef CTRL_BREAK_EVENT
1650
1636
if (PyModule_AddIntMacro (m , CTRL_BREAK_EVENT ))
1651
- goto finally ;
1637
+ return -1 ;
1652
1638
#endif
1653
1639
1654
1640
#ifdef MS_WINDOWS
@@ -1657,12 +1643,30 @@ PyInit__signal(void)
1657
1643
#endif
1658
1644
1659
1645
if (PyErr_Occurred ()) {
1660
- Py_DECREF (m );
1661
- m = NULL ;
1646
+ return -1 ;
1662
1647
}
1663
1648
1664
- finally :
1665
- return m ;
1649
+ return 0 ;
1650
+ }
1651
+
1652
+ static PyModuleDef_Slot signal_slots [] = {
1653
+ {Py_mod_exec , signal_exec },
1654
+ {0 , NULL }
1655
+ };
1656
+
1657
+ static struct PyModuleDef signalmodule = {
1658
+ PyModuleDef_HEAD_INIT ,
1659
+ "_signal" ,
1660
+ .m_doc = module_doc ,
1661
+ .m_size = 0 ,
1662
+ .m_methods = signal_methods ,
1663
+ .m_slots = signal_slots
1664
+ };
1665
+
1666
+ PyMODINIT_FUNC
1667
+ PyInit__signal (void )
1668
+ {
1669
+ return PyModuleDef_Init (& signalmodule );
1666
1670
}
1667
1671
1668
1672
static void
0 commit comments