py/scheduler: Allow selective handling in mp_handle_pending.

Extend mp_handle_pending to support three distinct behaviors via
mp_handle_pending_internal():

- MP_HANDLE_PENDING_CALLBACKS_ONLY: process callbacks only
- MP_HANDLE_PENDING_CALLBACKS_AND_EXCEPTIONS: callbacks + raise exceptions
- MP_HANDLE_PENDING_CALLBACKS_AND_CLEAR_EXCEPTIONS: callbacks + clear only

Original mp_handle_pending(bool) preserved as inline wrapper for
backward compatibility.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
This commit is contained in:
iabdalkader
2025-09-25 16:28:38 +02:00
committed by Damien George
parent c91e091ad7
commit c57aebf790
2 changed files with 22 additions and 6 deletions

View File

@@ -52,6 +52,12 @@ typedef enum {
MP_ARG_KW_ONLY = 0x200,
} mp_arg_flag_t;
typedef enum {
MP_HANDLE_PENDING_CALLBACKS_ONLY,
MP_HANDLE_PENDING_CALLBACKS_AND_EXCEPTIONS,
MP_HANDLE_PENDING_CALLBACKS_AND_CLEAR_EXCEPTIONS,
} mp_handle_pending_behaviour_t;
typedef union _mp_arg_val_t {
bool u_bool;
mp_int_t u_int;
@@ -100,7 +106,14 @@ void mp_sched_keyboard_interrupt(void);
#if MICROPY_ENABLE_VM_ABORT
void mp_sched_vm_abort(void);
#endif
void mp_handle_pending(bool raise_exc);
void mp_handle_pending_internal(mp_handle_pending_behaviour_t behavior);
static inline void mp_handle_pending(bool raise_exc) {
mp_handle_pending_internal(raise_exc ?
MP_HANDLE_PENDING_CALLBACKS_AND_EXCEPTIONS :
MP_HANDLE_PENDING_CALLBACKS_AND_CLEAR_EXCEPTIONS);
}
#if MICROPY_ENABLE_SCHEDULER
void mp_sched_lock(void);