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
Damien George 2017-03-20 18:42:27 +11:00
rodzic 231cfc84a7
commit 1a5c8d1053
1 zmienionych plików z 6 dodań i 0 usunięć

Wyświetl plik

@ -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