uloop: allow specifying a timeout for uloop_run()
This can be useful for cleanup with pending timers, or for hooking into existing code that does not use uloop Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
fa9937cc4f
commit
368fd26458
2 changed files with 12 additions and 3 deletions
9
uloop.c
9
uloop.c
|
@ -520,8 +520,9 @@ bool uloop_cancelling(void)
|
|||
return uloop_run_depth > 0 && uloop_cancelled;
|
||||
}
|
||||
|
||||
int uloop_run(void)
|
||||
int uloop_run_timeout(int timeout)
|
||||
{
|
||||
int next_time = 0;
|
||||
struct timeval tv;
|
||||
|
||||
/*
|
||||
|
@ -545,7 +546,11 @@ int uloop_run(void)
|
|||
break;
|
||||
|
||||
uloop_gettime(&tv);
|
||||
uloop_run_events(uloop_get_next_timeout(&tv));
|
||||
|
||||
next_time = uloop_get_next_timeout(&tv);
|
||||
if (timeout > 0 && next_time < timeout)
|
||||
timeout = next_time;
|
||||
uloop_run_events(timeout);
|
||||
}
|
||||
|
||||
if (!--uloop_run_depth)
|
||||
|
|
6
uloop.h
6
uloop.h
|
@ -105,7 +105,11 @@ static inline void uloop_end(void)
|
|||
}
|
||||
|
||||
int uloop_init(void);
|
||||
int uloop_run(void);
|
||||
int uloop_run_timeout(int timeout);
|
||||
static inline int uloop_run(void)
|
||||
{
|
||||
return uloop_run_timeout(-1);
|
||||
}
|
||||
void uloop_done(void);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue