Browse Source

subd: clear transient billboard on start and shutdown.

Use NULL on the callback to mean "clear the slot", and call it.

We have do this in two places: the old daemon might die, or the new
daemon might start first.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ppa-0.6.1
Rusty Russell 7 years ago
committed by Christian Decker
parent
commit
cca0a5412e
  1. 10
      lightningd/channel.c
  2. 5
      lightningd/opening_control.c
  3. 5
      lightningd/subd.c

10
lightningd/channel.c

@ -326,11 +326,13 @@ void channel_set_billboard(struct channel *channel, bool perm, const char *str)
p = &channel->billboard.permanent[channel->state]; p = &channel->billboard.permanent[channel->state];
else else
p = &channel->billboard.transient; p = &channel->billboard.transient;
tal_free(*p); *p = tal_free(*p);
*p = tal_fmt(channel, "%s:%s", channel_state_name(channel), str); if (str) {
if (taken(str)) *p = tal_fmt(channel, "%s:%s", channel_state_name(channel), str);
tal_free(str); if (taken(str))
tal_free(str);
}
} }
void channel_fail_transient(struct channel *channel, const char *fmt, ...) void channel_fail_transient(struct channel *channel, const char *fmt, ...)

5
lightningd/opening_control.c

@ -490,8 +490,9 @@ static void opening_channel_set_billboard(struct uncommitted_channel *uc,
bool perm UNUSED, bool perm UNUSED,
const char *happenings TAKES) const char *happenings TAKES)
{ {
tal_free(uc->transient_billboard); uc->transient_billboard = tal_free(uc->transient_billboard);
uc->transient_billboard = tal_strdup(uc, happenings); if (happenings)
uc->transient_billboard = tal_strdup(uc, happenings);
} }
static void destroy_uncommitted_channel(struct uncommitted_channel *uc) static void destroy_uncommitted_channel(struct uncommitted_channel *uc)

5
lightningd/subd.c

@ -585,6 +585,8 @@ static void destroy_subd(struct subd *sd)
struct db *db = sd->ld->wallet->db; struct db *db = sd->ld->wallet->db;
bool outer_transaction; bool outer_transaction;
/* Clear any transient messages in billboard */
sd->billboardcb(channel, false, NULL);
sd->channel = NULL; sd->channel = NULL;
/* We can be freed both inside msg handling, or spontaneously. */ /* We can be freed both inside msg handling, or spontaneously. */
@ -695,6 +697,9 @@ static struct subd *new_subd(struct lightningd *ld,
log_debug(sd->log, "pid %u, msgfd %i", sd->pid, msg_fd); log_debug(sd->log, "pid %u, msgfd %i", sd->pid, msg_fd);
/* Clear any old transient message. */
if (billboardcb)
billboardcb(sd->channel, false, NULL);
return sd; return sd;
} }

Loading…
Cancel
Save