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;
|
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)
|
||||||
|
|
6
uloop.h
6
uloop.h
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue