Browse Source

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>
master
Felix Fietkau 4 years ago
parent
commit
368fd26458
2 changed files with 12 additions and 3 deletions
  1. +7
    -2
      uloop.c
  2. +5
    -1
      uloop.h

+ 7
- 2
uloop.c View File

@ -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)


+ 5
- 1
uloop.h View File

@ -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…
Cancel
Save