Browse Source

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.
ppa-0.6.1
Christian Decker 8 years ago
parent
commit
1c4c874d3f
  1. 2
      daemon/chaintopology.c
  2. 7
      daemon/irc_announce.c
  3. 8
      daemon/p2p_announce.c
  4. 4
      daemon/peer.c
  5. 14
      daemon/timeout.c
  6. 8
      daemon/timeout.h

2
daemon/chaintopology.c

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

7
daemon/irc_announce.c

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

8
daemon/p2p_announce.c

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

4
daemon/peer.c

@ -259,7 +259,7 @@ static void remote_changes_pending(struct peer *peer)
{ {
if (!peer->commit_timer) { if (!peer->commit_timer) {
log_debug(peer->log, "remote_changes_pending: adding 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, peer->dstate->config.commit_time,
try_commit, peer); try_commit, peer);
} else } 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"); 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) static struct io_plan *init_conn(struct io_conn *conn, struct peer *peer)

14
daemon/timeout.c

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

8
daemon/timeout.h

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

Loading…
Cancel
Save