diff --git a/sched.c b/sched.c index fce9f068..23012586 100644 --- a/sched.c +++ b/sched.c @@ -472,6 +472,20 @@ SCH_RemoveTimeout(SCH_TimeoutID id) assert(0); } +/* ================================================== */ + +void +SCH_Reset(void) +{ + while (n_timer_queue_entries > 0) + SCH_RemoveTimeout(timer_queue.next->id); + + while (one_highest_fd > 0) { + close(one_highest_fd - 1); + SCH_RemoveFileHandler(one_highest_fd - 1); + } +} + /* ================================================== */ /* Try to dispatch any timeouts that have already gone by, and keep going until all are done. (The earlier ones may take so diff --git a/sched.h b/sched.h index 5ff53c7d..b7d4279f 100644 --- a/sched.h +++ b/sched.h @@ -82,6 +82,9 @@ extern SCH_TimeoutID SCH_AddTimeoutInClass(double min_delay, double separation, /* The next one probably ought to return a status code */ extern void SCH_RemoveTimeout(SCH_TimeoutID); +/* Remove all timeouts and close all file descriptors */ +extern void SCH_Reset(void); + extern void SCH_MainLoop(void); extern void SCH_QuitProgram(void);