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