From 26a1ed8bc349953814ec2df1ee27dcd4106bec72 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 20 Nov 2019 12:39:32 +0100 Subject: [PATCH] sched: add function to remove all timers and descriptors This allows a helper process to be started in an *_Initialise() call and use the scheduler (unlike the privops helper, which has its own loop). --- sched.c | 14 ++++++++++++++ sched.h | 3 +++ 2 files changed, 17 insertions(+) diff --git a/sched.c b/sched.c index fce9f06..2301258 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 5ff53c7..b7d4279 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);