py/vm: Don't release the GIL if the scheduler is locked.
The scheduler being locked general means we are running a scheduled function, and switching to another thread violates that, so don't switch in such a case (even though we technically could). And if we are running a scheduled function then we want to finish it ASAP, so we shouldn't switch to another thread. Furthermore, ports with threading enabled will lock the scheduler during a hard IRQ, and this patch to the VM will make sure that threads are not switched during a hard IRQ (which would crash the VM).
This commit is contained in:
parent
231cfc84a7
commit
1a5c8d1053
6
py/vm.c
6
py/vm.c
@ -1301,9 +1301,15 @@ pending_exception_check:
|
|||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
#if MICROPY_ENABLE_SCHEDULER
|
||||||
|
// can only switch threads if the scheduler is unlocked
|
||||||
|
if (MP_STATE_VM(sched_state) == MP_SCHED_IDLE)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
MP_THREAD_GIL_EXIT();
|
MP_THREAD_GIL_EXIT();
|
||||||
MP_THREAD_GIL_ENTER();
|
MP_THREAD_GIL_ENTER();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // for loop
|
} // for loop
|
||||||
|
Loading…
x
Reference in New Issue
Block a user