Skip to content

Commit

Permalink
timeout: oneshot timer support.
Browse files Browse the repository at this point in the history
Signed-off-by: Rusty Russell <[email protected]>
  • Loading branch information
rustyrussell committed Jan 21, 2016
1 parent 9f560a9 commit 6ba5c3c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
36 changes: 36 additions & 0 deletions daemon/timeout.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,39 @@ void refresh_timeout(struct lightningd_state *dstate, struct timeout *t)
timer_add(&dstate->timers, &t->timer,
timeabs_add(time_now(), t->interval));
}

/* FIXME: Make all timers one-shot! */
struct oneshot {
struct timeout timeout;
struct lightningd_state *dstate;
void (*cb)(void *);
void *arg;
};

static void remove_timer(struct oneshot *o)
{
timer_del(&o->dstate->timers, &o->timeout.timer);
}

static void oneshot_done(struct oneshot *o)
{
o->cb(o->arg);
tal_free(o);
}

struct oneshot *oneshot_timeout_(struct lightningd_state *dstate,
const tal_t *ctx, unsigned int seconds,
void (*cb)(void *), void *arg)
{
struct oneshot *o = tal(ctx, struct oneshot);

o->dstate = dstate;
o->cb = cb;
o->arg = arg;

init_timeout(&o->timeout, seconds, oneshot_done, o);
refresh_timeout(dstate, &o->timeout);
tal_add_destructor(o, remove_timer);

return o;
}
9 changes: 9 additions & 0 deletions daemon/timeout.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,13 @@ void refresh_timeout(struct lightningd_state *dstate, struct timeout *t);
init_timeout_((t), (interval), \
typesafe_cb(void, void *, (func), (arg)), (arg))

/* tal_free this to disable timer. */
struct oneshot *oneshot_timeout_(struct lightningd_state *dstate,
const tal_t *ctx, unsigned int seconds,
void (*cb)(void *), void *arg);

#define oneshot_timeout(dstate, ctx, interval, func, arg) \
oneshot_timeout_((dstate), (ctx), (interval), \
typesafe_cb(void, void *, (func), (arg)), (arg))

#endif /* LIGHTNING_DAEMON_TIMEOUT_H */

0 comments on commit 6ba5c3c

Please sign in to comment.