From 6a87084019e3e78eda0a21a3c80d600d0bd21991 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Sat, 29 Oct 2016 13:42:36 +0300
Subject: [PATCH] extmod/utime_mphal: Add MP_THREAD_GIL_EXIT/ENTER warppers for
 sleep functions.

Ported from unix port.
---
 extmod/utime_mphal.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/extmod/utime_mphal.c b/extmod/utime_mphal.c
index 4a03bf94b..9bdf84188 100644
--- a/extmod/utime_mphal.c
+++ b/extmod/utime_mphal.c
@@ -33,14 +33,17 @@
 #include "py/obj.h"
 #include "py/mphal.h"
 #include "py/smallint.h"
+#include "py/runtime.h"
 #include "extmod/utime_mphal.h"
 
 STATIC mp_obj_t time_sleep(mp_obj_t seconds_o) {
+    MP_THREAD_GIL_EXIT();
     #if MICROPY_PY_BUILTINS_FLOAT
     mp_hal_delay_ms(1000 * mp_obj_get_float(seconds_o));
     #else
     mp_hal_delay_ms(1000 * mp_obj_get_int(seconds_o));
     #endif
+    MP_THREAD_GIL_ENTER();
     return mp_const_none;
 }
 MP_DEFINE_CONST_FUN_OBJ_1(mp_utime_sleep_obj, time_sleep);
@@ -48,7 +51,9 @@ MP_DEFINE_CONST_FUN_OBJ_1(mp_utime_sleep_obj, time_sleep);
 STATIC mp_obj_t time_sleep_ms(mp_obj_t arg) {
     mp_int_t ms = mp_obj_get_int(arg);
     if (ms > 0) {
+        MP_THREAD_GIL_EXIT();
         mp_hal_delay_ms(ms);
+        MP_THREAD_GIL_ENTER();
     }
     return mp_const_none;
 }
@@ -57,7 +62,9 @@ MP_DEFINE_CONST_FUN_OBJ_1(mp_utime_sleep_ms_obj, time_sleep_ms);
 STATIC mp_obj_t time_sleep_us(mp_obj_t arg) {
     mp_int_t us = mp_obj_get_int(arg);
     if (us > 0) {
+        MP_THREAD_GIL_EXIT();
         mp_hal_delay_us(us);
+        MP_THREAD_GIL_ENTER();
     }
     return mp_const_none;
 }
-- 
GitLab