refactor: Making timers independent of the lightningd_state

The `dstate` reference was only an indirection to the `timers`
sub-structure anyway, so removing this indirection allows us to reuse
the timers in the subdaemon arch.
This commit is contained in:
Christian Decker 2017-02-04 15:32:02 +01:00
parent 597687d1f0
commit 1c4c874d3f
6 changed files with 22 additions and 21 deletions

View File

@ -80,7 +80,7 @@ static void next_topology_timer(struct lightningd_state *dstate)
dstate->topology->startup = false;
io_break(dstate);
}
new_reltimer(dstate, dstate, dstate->config.poll_time,
new_reltimer(&dstate->timers, dstate, dstate->config.poll_time,
start_poll_chaintip, dstate);
}

View File

@ -95,7 +95,7 @@ static void announce(struct ircstate *state)
/* By default we announce every 6 hours, otherwise when someone joins */
log_debug(state->log, "Setting long announce time: 6 hours");
state->dstate->announce = new_reltimer(state->dstate, state,
state->dstate->announce = new_reltimer(&state->dstate->timers, state,
time_from_sec(3600 * 6),
announce, state);
}
@ -105,7 +105,8 @@ static void handle_irc_disconnect(struct ircstate *state)
{
/* Stop announcing. */
state->dstate->announce = tal_free(state->dstate->announce);
new_reltimer(state->dstate, state, state->reconnect_timeout, irc_connect, state);
new_reltimer(&state->dstate->timers, state, state->reconnect_timeout,
irc_connect, state);
}
/* Verify a signed privmsg */
@ -243,7 +244,7 @@ static void handle_irc_command(struct ircstate *istate, const struct irccommand
delay = pseudorand(60000000);
log_debug(istate->log, "Setting new announce time %u sec",
delay / 1000000);
dstate->announce = new_reltimer(dstate, istate,
dstate->announce = new_reltimer(&dstate->timers, istate,
time_from_usec(delay),
announce, istate);
}

View File

@ -176,7 +176,7 @@ static void announce(struct lightningd_state *dstate)
struct peer *p;
int nchan = 0;
new_reltimer(dstate, dstate, time_from_sec(5*60*60), announce, dstate);
new_reltimer(&dstate->timers, dstate, time_from_sec(5*60*60), announce, dstate);
list_for_each(&dstate->peers, p, list) {
if (state_is_normal(p->state)) {
@ -203,7 +203,7 @@ static void process_broadcast_queue(struct lightningd_state *dstate)
{
struct peer *p;
struct queued_message *msg;
new_reltimer(dstate, dstate, time_from_sec(30), process_broadcast_queue, dstate);
new_reltimer(&dstate->timers, dstate, time_from_sec(30), process_broadcast_queue, dstate);
list_for_each(&dstate->peers, p, list) {
if (!state_is_normal(p->state))
continue;
@ -219,6 +219,6 @@ static void process_broadcast_queue(struct lightningd_state *dstate)
void setup_p2p_announce(struct lightningd_state *dstate)
{
new_reltimer(dstate, dstate, time_from_sec(5*60*60), announce, dstate);
new_reltimer(dstate, dstate, time_from_sec(30), process_broadcast_queue, dstate);
new_reltimer(&dstate->timers, dstate, time_from_sec(5*60*60), announce, dstate);
new_reltimer(&dstate->timers, dstate, time_from_sec(30), process_broadcast_queue, dstate);
}

View File

@ -259,7 +259,7 @@ static void remote_changes_pending(struct peer *peer)
{
if (!peer->commit_timer) {
log_debug(peer->log, "remote_changes_pending: adding timer");
peer->commit_timer = new_reltimer(peer->dstate, peer,
peer->commit_timer = new_reltimer(&peer->dstate->timers, peer,
peer->dstate->config.commit_time,
try_commit, peer);
} else
@ -4415,7 +4415,7 @@ static void reconnect_failed(struct io_conn *conn, struct peer *peer)
}
log_debug(peer->log, "Setting timer to re-connect");
new_reltimer(peer->dstate, peer, time_from_sec(15), try_reconnect, peer);
new_reltimer(&peer->dstate->timers, peer, time_from_sec(15), try_reconnect, peer);
}
static struct io_plan *init_conn(struct io_conn *conn, struct peer *peer)

View File

@ -3,7 +3,7 @@
#include "utils.h"
struct oneshot {
struct lightningd_state *dstate;
struct timers *timers;
struct timer timer;
void (*cb)(void *);
void *arg;
@ -11,10 +11,10 @@ struct oneshot {
static void remove_timer(struct oneshot *t)
{
timer_del(&t->dstate->timers, &t->timer);
timer_del(t->timers, &t->timer);
}
struct oneshot *new_reltimer_(struct lightningd_state *dstate,
struct oneshot *new_reltimer_(struct timers *timers,
const tal_t *ctx,
struct timerel relexpiry,
void (*cb)(void *), void *arg)
@ -23,18 +23,18 @@ struct oneshot *new_reltimer_(struct lightningd_state *dstate,
t->cb = cb;
t->arg = arg;
t->dstate = dstate;
t->timers = timers;
timer_init(&t->timer);
timer_addrel(&dstate->timers, &t->timer, relexpiry);
timer_addrel(timers, &t->timer, relexpiry);
tal_add_destructor(t, remove_timer);
return t;
}
void timer_expired(struct lightningd_state *dstate, struct timer *timer)
void timer_expired(tal_t *ctx, struct timer *timer)
{
struct oneshot *t = container_of(timer, struct oneshot, timer);
const tal_t *tmpctx = tal_tmpctx(dstate);
const tal_t *tmpctx = tal_tmpctx(ctx);
/* If it doesn't free itself, freeing tmpctx will do it */
tal_steal(tmpctx, t);

View File

@ -8,15 +8,15 @@
#include <ccan/typesafe_cb/typesafe_cb.h>
/* tal_free this to disable timer. */
struct oneshot *new_reltimer_(struct lightningd_state *dstate,
struct oneshot *new_reltimer_(struct timers *timers,
const tal_t *ctx,
struct timerel expire,
void (*cb)(void *), void *arg);
#define new_reltimer(dstate, ctx, relexpire, func, arg) \
new_reltimer_((dstate), (ctx), (relexpire), \
#define new_reltimer(timers, ctx, relexpire, func, arg) \
new_reltimer_((timers), (ctx), (relexpire), \
typesafe_cb(void, void *, (func), (arg)), (arg))
void timer_expired(struct lightningd_state *dstate, struct timer *timer);
void timer_expired(tal_t *ctx, struct timer *timer);
#endif /* LIGHTNING_DAEMON_TIMEOUT_H */