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:
Felix Fietkau 2017-06-01 11:24:37 +02:00
parent fa9937cc4f
commit 368fd26458
2 changed files with 12 additions and 3 deletions

View file

@ -520,8 +520,9 @@ bool uloop_cancelling(void)
return uloop_run_depth > 0 && uloop_cancelled; return uloop_run_depth > 0 && uloop_cancelled;
} }
int uloop_run(void) int uloop_run_timeout(int timeout)
{ {
int next_time = 0;
struct timeval tv; struct timeval tv;
/* /*
@ -545,7 +546,11 @@ int uloop_run(void)
break; break;
uloop_gettime(&tv); 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) if (!--uloop_run_depth)

View file

@ -105,7 +105,11 @@ static inline void uloop_end(void)
} }
int uloop_init(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); void uloop_done(void);
#endif #endif