From 3883f29485fad21105f6f965d56bfec842b8cfbb Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Tue, 17 Oct 2023 12:27:49 +1100 Subject: [PATCH] py/modthread: Initialise nlr_jump_callback_top on threads. The main thread gets this because the thread state is in bss, but subsequent threads need this field to be initialised. Also added a note to mpstate.h to help avoid missing this in the future. Fixes issue #12695. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- py/modthread.c | 1 + py/mpstate.h | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/py/modthread.c b/py/modthread.c index 6b75474904f4..e4dcccd259d8 100644 --- a/py/modthread.c +++ b/py/modthread.c @@ -174,6 +174,7 @@ STATIC void *thread_entry(void *args_in) { // The GC starts off unlocked on this thread. ts.gc_lock_depth = 0; + ts.nlr_jump_callback_top = NULL; ts.mp_pending_exception = MP_OBJ_NULL; // set locals and globals from the calling context diff --git a/py/mpstate.h b/py/mpstate.h index 64915ab87dd4..0e0388e410ac 100644 --- a/py/mpstate.h +++ b/py/mpstate.h @@ -249,8 +249,10 @@ typedef struct _mp_state_vm_t { #endif } mp_state_vm_t; -// This structure holds state that is specific to a given thread. -// Everything in this structure is scanned for root pointers. +// This structure holds state that is specific to a given thread. Everything +// in this structure is scanned for root pointers. Anything added to this +// structure must have corresponding initialisation added to thread_entry (in +// py/modthread.c). typedef struct _mp_state_thread_t { // Stack top at the start of program char *stack_top;