Skip to content

Commit b006bb0

Browse files
iabdalkaderdpgeorge
authored andcommitted
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 <signal handler called> 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 <i.abdalkader@gmail.com>
1 parent 43a4914 commit b006bb0

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

extmod/vfs_reader.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ static mp_uint_t mp_reader_vfs_readbyte(void *data) {
5656
return MP_READER_EOF;
5757
} else {
5858
int errcode;
59+
mp_event_handle_nowait();
5960
reader->buflen = mp_stream_rw(reader->file, reader->buf, reader->bufsize, &errcode, MP_STREAM_RW_READ | MP_STREAM_RW_ONCE);
6061
if (errcode != 0) {
6162
// TODO handle errors properly

0 commit comments

Comments
 (0)