esp32/mpthreadport: Don't explicitly free thread struct in TCB cleanup.

Because vPortCleanUpTCB runs on the FreeRTOS idle task and cannot execute
any VM or runtime related code like freeing memory.

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George 2021-05-08 18:14:13 +10:00
parent fd24e649fd
commit 31e0b8c71c
1 changed files with 3 additions and 2 deletions

View File

@ -166,6 +166,8 @@ void mp_thread_finish(void) {
mp_thread_mutex_unlock(&thread_mutex);
}
// This is called from the FreeRTOS idle task and is not within Python context,
// so MP_STATE_THREAD is not valid and it does not have the GIL.
void vPortCleanUpTCB(void *tcb) {
if (thread == NULL) {
// threading not yet initialised
@ -182,8 +184,7 @@ void vPortCleanUpTCB(void *tcb) {
// move the start pointer
thread = th->next;
}
// explicitly release all its memory
m_del(thread_t, th, 1);
// The "th" memory will eventually be reclaimed by the GC.
break;
}
}