py/mpstate: Schedule KeyboardInterrupt on main thread.
This introduces a new macro to get the main thread and uses it to ensure that asynchronous exceptions such as KeyboardInterrupt (CTRL+C) are only scheduled on the main thread. This is more deterministic than being scheduled on a random thread and is more in line with CPython that only allow signal handlers to run on the main thread. Fixes issue #7026. Signed-off-by: David Lechner <david@pybricks.com>
This commit is contained in:
committed by
Damien George
parent
ca920f7218
commit
259d9b69fe
@@ -285,12 +285,13 @@ extern mp_state_ctx_t mp_state_ctx;
|
||||
|
||||
#define MP_STATE_VM(x) (mp_state_ctx.vm.x)
|
||||
#define MP_STATE_MEM(x) (mp_state_ctx.mem.x)
|
||||
#define MP_STATE_MAIN_THREAD(x) (mp_state_ctx.thread.x)
|
||||
|
||||
#if MICROPY_PY_THREAD
|
||||
extern mp_state_thread_t *mp_thread_get_state(void);
|
||||
#define MP_STATE_THREAD(x) (mp_thread_get_state()->x)
|
||||
#else
|
||||
#define MP_STATE_THREAD(x) (mp_state_ctx.thread.x)
|
||||
#define MP_STATE_THREAD(x) MP_STATE_MAIN_THREAD(x)
|
||||
#endif
|
||||
|
||||
#endif // MICROPY_INCLUDED_PY_MPSTATE_H
|
||||
|
||||
Reference in New Issue
Block a user