1 #include <lunaix/switch.h>
2 #include <lunaix/signal.h>
3 #include <lunaix/sched.h>
4 #include <lunaix/process.h>
7 signal_dispatch(struct signpost_result* result);
10 preempt_handle_stalled(struct signpost_result* result);
12 #define do_signpost(fn, result) \
15 if ((result)->mode == SWITCH_MODE_FAST) { \
16 thread_stats_update_leaving(); \
17 return (result)->stack; \
19 if ((result)->mode == SWITCH_MODE_GIVEUP) { \
21 fail("unexpected return"); \
28 struct signpost_result result;
30 do_signpost(preempt_handle_stalled, &result);
32 do_signpost(signal_dispatch, &result);
34 thread_stats_update_leaving();