From b006bb0dff7a29f1b01df1269cb7340fcd7b2727 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Tue, 17 Feb 2026 16:30:13 +0100 Subject: [PATCH] extmod/vfs_reader: Process pending events during file reads. Call `mp_event_handle_nowait()` in the VFS reader buffer refill path so that pending scheduled events (USB task, network poll, etc.) get processed during long-running import/parse/compile operations. Without this, importing a large Python module from the filesystem blocks for too long causing TinyUSB event queue to overflow. For example, on renesas-ra, running a script that imports iperf3 via mpremote run, asserts, most likely due to SOF interrupts not getting processing: queue_event at lib/tinyusb/src/device/usbd.c:382 dcd_event_handler at lib/tinyusb/src/device/usbd.c:1318 dcd_event_sof at lib/tinyusb/src/device/dcd.h:237 dcd_int_handler at tinyusb/src/portable/renesas/rusb2/dcd_rusb2.c:964 disk_ioctl at extmod/vfs_fat_diskio.c:125 validate at lib/oofatfs/ff.c:3359 f_read at lib/oofatfs/ff.c:3625 file_obj_read at extmod/vfs_fat_file.c:75 mp_stream_rw at py/stream.c:60 mp_reader_vfs_readbyte at extmod/vfs_reader.c:59 next_char at py/lexer.c:174 mp_lexer_to_next at py/lexer.c:713 mp_parse at py/parse.c:1167 Signed-off-by: iabdalkader --- extmod/vfs_reader.c | 1 + 1 file changed, 1 insertion(+) diff --git a/extmod/vfs_reader.c b/extmod/vfs_reader.c index 6c36770295..139ecafb35 100644 --- a/extmod/vfs_reader.c +++ b/extmod/vfs_reader.c @@ -56,6 +56,7 @@ static mp_uint_t mp_reader_vfs_readbyte(void *data) { return MP_READER_EOF; } else { int errcode; + mp_event_handle_nowait(); reader->buflen = mp_stream_rw(reader->file, reader->buf, reader->bufsize, &errcode, MP_STREAM_RW_READ | MP_STREAM_RW_ONCE); if (errcode != 0) { // TODO handle errors properly