4
4
/* XXX Signals should be recorded per thread, now we have thread state. */
5
5
6
6
#include "Python.h"
7
- #include "pycore_atomic.h" // _Py_atomic_int
8
7
#include "pycore_call.h" // _PyObject_Call()
9
8
#include "pycore_ceval.h" // _PyEval_SignalReceived()
10
9
#include "pycore_emscripten_signal.h" // _Py_CHECK_EMSCRIPTEN_SIGNALS
@@ -124,13 +123,13 @@ typedef struct {
124
123
Py_LOCAL_INLINE (PyObject * )
125
124
get_handler (int i )
126
125
{
127
- return (PyObject * )_Py_atomic_load (& Handlers [i ].func );
126
+ return (PyObject * )_Py_atomic_load_uintptr (& Handlers [i ].func );
128
127
}
129
128
130
129
Py_LOCAL_INLINE (void )
131
130
set_handler (int i , PyObject * func )
132
131
{
133
- _Py_atomic_store (& Handlers [i ].func , (uintptr_t )func );
132
+ _Py_atomic_store_uintptr (& Handlers [i ].func , (uintptr_t )func );
134
133
}
135
134
136
135
@@ -267,11 +266,11 @@ report_wakeup_send_error(void* data)
267
266
static void
268
267
trip_signal (int sig_num )
269
268
{
270
- _Py_atomic_store_relaxed (& Handlers [sig_num ].tripped , 1 );
269
+ _Py_atomic_store_int_relaxed (& Handlers [sig_num ].tripped , 1 );
271
270
272
271
/* Set is_tripped after setting .tripped, as it gets
273
272
cleared in PyErr_CheckSignals() before .tripped. */
274
- _Py_atomic_store (& is_tripped , 1 );
273
+ _Py_atomic_store_int (& is_tripped , 1 );
275
274
276
275
/* Signals are always handled by the main interpreter */
277
276
PyInterpreterState * interp = _PyInterpreterState_Main ();
@@ -1731,7 +1730,7 @@ _PySignal_Fini(void)
1731
1730
// Restore default signals and clear handlers
1732
1731
for (int signum = 1 ; signum < Py_NSIG ; signum ++ ) {
1733
1732
PyObject * func = get_handler (signum );
1734
- _Py_atomic_store_relaxed (& Handlers [signum ].tripped , 0 );
1733
+ _Py_atomic_store_int_relaxed (& Handlers [signum ].tripped , 0 );
1735
1734
set_handler (signum , NULL );
1736
1735
if (func != NULL
1737
1736
&& func != Py_None
@@ -1785,7 +1784,7 @@ int
1785
1784
_PyErr_CheckSignalsTstate (PyThreadState * tstate )
1786
1785
{
1787
1786
_Py_CHECK_EMSCRIPTEN_SIGNALS ();
1788
- if (!_Py_atomic_load (& is_tripped )) {
1787
+ if (!_Py_atomic_load_int (& is_tripped )) {
1789
1788
return 0 ;
1790
1789
}
1791
1790
@@ -1803,15 +1802,15 @@ _PyErr_CheckSignalsTstate(PyThreadState *tstate)
1803
1802
* we receive a signal i after we zero is_tripped and before we
1804
1803
* check Handlers[i].tripped.
1805
1804
*/
1806
- _Py_atomic_store (& is_tripped , 0 );
1805
+ _Py_atomic_store_int (& is_tripped , 0 );
1807
1806
1808
1807
_PyInterpreterFrame * frame = _PyThreadState_GetFrame (tstate );
1809
1808
signal_state_t * state = & signal_global_state ;
1810
1809
for (int i = 1 ; i < Py_NSIG ; i ++ ) {
1811
- if (!_Py_atomic_load_relaxed (& Handlers [i ].tripped )) {
1810
+ if (!_Py_atomic_load_int_relaxed (& Handlers [i ].tripped )) {
1812
1811
continue ;
1813
1812
}
1814
- _Py_atomic_store_relaxed (& Handlers [i ].tripped , 0 );
1813
+ _Py_atomic_store_int_relaxed (& Handlers [i ].tripped , 0 );
1815
1814
1816
1815
/* Signal handlers can be modified while a signal is received,
1817
1816
* and therefore the fact that trip_signal() or PyErr_SetInterrupt()
@@ -1857,7 +1856,7 @@ _PyErr_CheckSignalsTstate(PyThreadState *tstate)
1857
1856
}
1858
1857
if (!result ) {
1859
1858
/* On error, re-schedule a call to _PyErr_CheckSignalsTstate() */
1860
- _Py_atomic_store (& is_tripped , 1 );
1859
+ _Py_atomic_store_int (& is_tripped , 1 );
1861
1860
return -1 ;
1862
1861
}
1863
1862
@@ -1975,7 +1974,7 @@ _PySignal_Init(int install_signal_handlers)
1975
1974
#endif
1976
1975
1977
1976
for (int signum = 1 ; signum < Py_NSIG ; signum ++ ) {
1978
- _Py_atomic_store_relaxed (& Handlers [signum ].tripped , 0 );
1977
+ _Py_atomic_store_int_relaxed (& Handlers [signum ].tripped , 0 );
1979
1978
}
1980
1979
1981
1980
if (install_signal_handlers ) {
@@ -1997,11 +1996,11 @@ _PyOS_InterruptOccurred(PyThreadState *tstate)
1997
1996
return 0 ;
1998
1997
}
1999
1998
2000
- if (!_Py_atomic_load_relaxed (& Handlers [SIGINT ].tripped )) {
1999
+ if (!_Py_atomic_load_int_relaxed (& Handlers [SIGINT ].tripped )) {
2001
2000
return 0 ;
2002
2001
}
2003
2002
2004
- _Py_atomic_store_relaxed (& Handlers [SIGINT ].tripped , 0 );
2003
+ _Py_atomic_store_int_relaxed (& Handlers [SIGINT ].tripped , 0 );
2005
2004
return 1 ;
2006
2005
}
2007
2006
@@ -2019,13 +2018,13 @@ PyOS_InterruptOccurred(void)
2019
2018
static void
2020
2019
_clear_pending_signals (void )
2021
2020
{
2022
- if (!_Py_atomic_load (& is_tripped )) {
2021
+ if (!_Py_atomic_load_int (& is_tripped )) {
2023
2022
return ;
2024
2023
}
2025
2024
2026
- _Py_atomic_store (& is_tripped , 0 );
2025
+ _Py_atomic_store_int (& is_tripped , 0 );
2027
2026
for (int i = 1 ; i < Py_NSIG ; ++ i ) {
2028
- _Py_atomic_store_relaxed (& Handlers [i ].tripped , 0 );
2027
+ _Py_atomic_store_int_relaxed (& Handlers [i ].tripped , 0 );
2029
2028
}
2030
2029
}
2031
2030
0 commit comments