esp32/machine_uart: Release GIL for blocking reads.
If we're reading from an UART with a non-zero timeout, we can release the GIL so that other threads/tasks may run while we are sleeping waiting for data to arrive. Signed-off-by: Daniël van de Giessen <daniel@dvdgiessen.nl>
This commit is contained in:
parent
f8bd6778c8
commit
3cc3e4e032
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user