← index #18663PR #18790
Related · high · value 1.819
QUERY · ISSUE

Change to `mp_handle_pending' includes possible MICROPY_EVENT_POLL_HOOK and downstream code breakage

openby Gadgetoidopened 2026-01-08updated 2026-01-12
bugpy-core

Port, board and/or hardware

all

MicroPython version

1.27+

Reproduction

For long-running processes handled by user C modules (eg: busy wait on e-ink update) I've been using the pattern:

extern void mp_handle_pending_internal(bool);
mp_handle_pending(true);

I tried to build against 1.27 today, and ran into this build error:

modules/c/ssd1680/ssd1680.cpp.o: in function `pimoroni::SSD1680::busy_wait()':
modules/c/ssd1680/ssd1680.cpp:54:(.text._ZN8pimoroni7SSD16809busy_waitEv+0x10): undefined reference to `mp_handle_pending'

This looks like it was introduced by https://github.com/micropython/micropython/commit/c57aebf790c40125b663231ec4307d2a3f3cf193

This PR seems to make the assumption that mp_handle_pending is only ever called inline in runtime.h, or in code that uses:

#include "runtime.h"
mp_handle_pending(true);

This assumption doesn't seem to hold true, for example the same "undefined reference" error should occur if an attempt is made to call "MICROPY_EVENT_POLL_HOOK" from Zephyr code:

https://github.com/micropython/micropython/blob/26c16969ab954db4d8d79bed154e3d45c12c087f/ports/zephyr/mpconfigport.h#L171-L172

But I guess runtime.h is implicitly available here? In any case making the "extern" line redundant and this pattern should probably be updated where it occurs.

Either way the inline wrapper to preserve the old mp_handle_pending behaviour does not cover all possible cases, causing a break in my code from 1.26 to 1.27.

I expect breakage, though, so I'd propose the implicit "example" uses in the MicroPython codebase (there are a few things like "MICROPY_EVENT_POLL_HOOK") are updated and this issue should, with any luck, steer any future encounters (I'll probably forget and run into this again) toward the correct usage.

Expected behaviour

Observed behaviour

Additional Information

No, I've provided everything above.

Code of Conduct

Yes, I agree

CANDIDATE · PULL REQUEST

mimxrt/boards/PHYBOARD_RT1170: Update use of mp_handle_pending().

mergedby dpgeorgeopened 2026-02-06updated 2026-02-07
port-mimxrt

Summary

Update use of mp_handle_pending() on the new PHYBOARD_RT1170, following commits adbdded1854757ae992db150d3feaf9c4ffebbf2 and 0c7726a89c2ac39042f6d0f19ff98cbb50136113.

Testing

The board now builds locally (it's not built as part of CI).

Trade-offs and Alternatives

We could remove this custom definition of MICROPY_EVENT_POLL_HOOK for this board. @andrewleech do you know why it needed to be different to the mimxrt's default macro for this? Doesn't the WFE work correctly on that MCU?

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied