diff --git a/lightningd/subd.c b/lightningd/subd.c index 97ba3c1c5..a1fba13e3 100644 --- a/lightningd/subd.c +++ b/lightningd/subd.c @@ -822,6 +822,21 @@ void subd_release_channel(struct subd *owner, void *channel) } } +void subd_swap_channel_(struct subd *daemon, void *channel, + void (*errcb)(void *channel, + struct per_peer_state *pps, + const struct channel_id *channel_id, + const char *desc, + bool soft_error, + const u8 *err_for_them), + void (*billboardcb)(void *channel, bool perm, + const char *happenings)) +{ + daemon->channel = channel; + daemon->errcb = errcb; + daemon->billboardcb = billboardcb; +} + #if DEVELOPER char *opt_subd_dev_disconnect(const char *optarg, struct lightningd *ld) { diff --git a/lightningd/subd.h b/lightningd/subd.h index 4d4a31c0e..93aa4ab94 100644 --- a/lightningd/subd.h +++ b/lightningd/subd.h @@ -145,6 +145,31 @@ struct subd *new_channel_subd_(struct lightningd *ld, const char *), \ __VA_ARGS__) +/* subd_swap_channel - Swap the daemon's channel out */ +#define subd_swap_channel(subd, channel, errcb, billboardcb) \ + subd_swap_channel_((subd), (channel), \ + typesafe_cb_postargs(void, void *, \ + (errcb), \ + (channel), \ + struct per_peer_state *,\ + const struct channel_id *, \ + const char *, bool, \ + const u8 *), \ + typesafe_cb_postargs(void, void *, (billboardcb), \ + (channel), bool, \ + const char *)) + +void subd_swap_channel_(struct subd *daemon, void *channel, + void (*errcb)(void *channel, + struct per_peer_state *pps, + const struct channel_id *channel_id, + const char *desc, + bool soft_error, + const u8 *err_for_them), + void (*billboardcb)(void *channel, bool perm, + const char *happenings)); + + /** * subd_send_msg - queue a message to the subdaemon. * @sd: subdaemon to request