diff options
Diffstat (limited to 'ports/esp32/machine_uart.c')
-rw-r--r-- | ports/esp32/machine_uart.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/ports/esp32/machine_uart.c b/ports/esp32/machine_uart.c index 541d7ccc5..0b4f5890b 100644 --- a/ports/esp32/machine_uart.c +++ b/ports/esp32/machine_uart.c @@ -472,8 +472,17 @@ STATIC mp_uint_t machine_uart_read(mp_obj_t self_in, void *buf_in, mp_uint_t siz time_to_wait = pdMS_TO_TICKS(self->timeout); } + bool release_gil = time_to_wait > 0; + if (release_gil) { + MP_THREAD_GIL_EXIT(); + } + int bytes_read = uart_read_bytes(self->uart_num, buf_in, size, time_to_wait); + if (release_gil) { + MP_THREAD_GIL_ENTER(); + } + if (bytes_read <= 0) { *errcode = MP_EAGAIN; return MP_STREAM_ERROR; |