kopia lustrzana https://github.com/micropython/micropython
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).pull/2614/merge
rodzic
231cfc84a7
commit
1a5c8d1053
6
py/vm.c
6
py/vm.c
|
@ -1301,8 +1301,14 @@ pending_exception_check:
|
|||
#else
|
||||
{
|
||||
#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_ENTER();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue