lightningd: centralize refcounting behaviour for peers.
It's mildly neater this way. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
0ebad456b1
commit
8bffd2b604
|
@ -98,9 +98,7 @@ void delete_channel(struct channel *channel)
|
|||
wallet_channel_delete(channel->peer->ld->wallet, channel->dbid);
|
||||
tal_free(channel);
|
||||
|
||||
/* Last one out frees the peer */
|
||||
if (list_empty(&peer->channels) && !peer->uncommitted_channel)
|
||||
delete_peer(peer);
|
||||
maybe_delete_peer(peer);
|
||||
}
|
||||
|
||||
void get_channel_basepoints(struct lightningd *ld,
|
||||
|
|
|
@ -586,9 +586,7 @@ static void destroy_uncommitted_channel(struct uncommitted_channel *uc)
|
|||
|
||||
uc->peer->uncommitted_channel = NULL;
|
||||
|
||||
/* Last one out frees */
|
||||
if (list_empty(&uc->peer->channels))
|
||||
delete_peer(uc->peer);
|
||||
maybe_delete_peer(uc->peer);
|
||||
}
|
||||
|
||||
/* Returns NULL if there's already an opening or active channel for this peer */
|
||||
|
|
|
@ -116,7 +116,7 @@ struct peer *new_peer(struct lightningd *ld, u64 dbid,
|
|||
return peer;
|
||||
}
|
||||
|
||||
void delete_peer(struct peer *peer)
|
||||
static void delete_peer(struct peer *peer)
|
||||
{
|
||||
assert(list_empty(&peer->channels));
|
||||
assert(!peer->uncommitted_channel);
|
||||
|
@ -127,6 +127,16 @@ void delete_peer(struct peer *peer)
|
|||
tal_free(peer);
|
||||
}
|
||||
|
||||
/* Last one out deletes peer. */
|
||||
void maybe_delete_peer(struct peer *peer)
|
||||
{
|
||||
if (peer->uncommitted_channel)
|
||||
return;
|
||||
if (!list_empty(&peer->channels))
|
||||
return;
|
||||
delete_peer(peer);
|
||||
}
|
||||
|
||||
struct peer *find_peer_by_dbid(struct lightningd *ld, u64 dbid)
|
||||
{
|
||||
struct peer *p;
|
||||
|
|
|
@ -60,8 +60,8 @@ struct peer *new_peer(struct lightningd *ld, u64 dbid,
|
|||
const struct wireaddr_internal *addr,
|
||||
const u8 *gfeatures TAKES, const u8 *lfeatures TAKES);
|
||||
|
||||
/* Also removes from db. */
|
||||
void delete_peer(struct peer *peer);
|
||||
/* Last one out deletes peer. Also removes from db. */
|
||||
void maybe_delete_peer(struct peer *peer);
|
||||
|
||||
struct peer *peer_by_id(struct lightningd *ld, const struct pubkey *id);
|
||||
struct peer *peer_from_json(struct lightningd *ld,
|
||||
|
|
Loading…
Reference in New Issue