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:
parent
fd24e649fd
commit
31e0b8c71c
|
@ -166,6 +166,8 @@ void mp_thread_finish(void) {
|
||||||
mp_thread_mutex_unlock(&thread_mutex);
|
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) {
|
void vPortCleanUpTCB(void *tcb) {
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
// threading not yet initialised
|
// threading not yet initialised
|
||||||
|
@ -182,8 +184,7 @@ void vPortCleanUpTCB(void *tcb) {
|
||||||
// move the start pointer
|
// move the start pointer
|
||||||
thread = th->next;
|
thread = th->next;
|
||||||
}
|
}
|
||||||
// explicitly release all its memory
|
// The "th" memory will eventually be reclaimed by the GC.
|
||||||
m_del(thread_t, th, 1);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue