multi: move several wait group done calls to defer statements

This commit is contained in:
Federico Bond 2019-07-09 12:26:27 -03:00 committed by Oliver Gugger
parent 27849d3020
commit 10d94f99c0
No known key found for this signature in database
GPG Key ID: 8E4256593F177720
5 changed files with 10 additions and 6 deletions

@ -174,6 +174,8 @@ func (b *BitcoindNotifier) startNotifier() error {
// notificationDispatcher is the primary goroutine which handles client // notificationDispatcher is the primary goroutine which handles client
// notification registrations, as well as notification dispatches. // notification registrations, as well as notification dispatches.
func (b *BitcoindNotifier) notificationDispatcher() { func (b *BitcoindNotifier) notificationDispatcher() {
defer b.wg.Done()
out: out:
for { for {
select { select {
@ -436,7 +438,6 @@ out:
break out break out
} }
} }
b.wg.Done()
} }
// historicalConfDetails looks up whether a confirmation request (txid/output // historicalConfDetails looks up whether a confirmation request (txid/output

@ -288,6 +288,8 @@ func (b *BtcdNotifier) onRedeemingTx(tx *btcutil.Tx, details *btcjson.BlockDetai
// notificationDispatcher is the primary goroutine which handles client // notificationDispatcher is the primary goroutine which handles client
// notification registrations, as well as notification dispatches. // notification registrations, as well as notification dispatches.
func (b *BtcdNotifier) notificationDispatcher() { func (b *BtcdNotifier) notificationDispatcher() {
defer b.wg.Done()
out: out:
for { for {
select { select {
@ -487,7 +489,6 @@ out:
break out break out
} }
} }
b.wg.Done()
} }
// historicalConfDetails looks up whether a confirmation request (txid/output // historicalConfDetails looks up whether a confirmation request (txid/output

@ -781,6 +781,8 @@ func (t *txSubscriptionClient) Cancel() {
// wallet's notification client to a higher-level TransactionSubscription // wallet's notification client to a higher-level TransactionSubscription
// client. // client.
func (t *txSubscriptionClient) notificationProxier() { func (t *txSubscriptionClient) notificationProxier() {
defer t.wg.Done()
out: out:
for { for {
select { select {
@ -830,8 +832,6 @@ out:
break out break out
} }
} }
t.wg.Done()
} }
// SubscribeTransactions returns a TransactionSubscription client which // SubscribeTransactions returns a TransactionSubscription client which

@ -425,6 +425,8 @@ func (l *LightningWallet) ActiveReservations() []*ChannelReservation {
// requestHandler is the primary goroutine(s) responsible for handling, and // requestHandler is the primary goroutine(s) responsible for handling, and
// dispatching replies to all messages. // dispatching replies to all messages.
func (l *LightningWallet) requestHandler() { func (l *LightningWallet) requestHandler() {
defer l.wg.Done()
out: out:
for { for {
select { select {
@ -450,8 +452,6 @@ out:
break out break out
} }
} }
l.wg.Done()
} }
// InitChannelReservation kicks off the 3-step workflow required to successfully // InitChannelReservation kicks off the 3-step workflow required to successfully

@ -1836,6 +1836,8 @@ out:
} }
} }
// Avoid an exit deadlock by ensuring WaitGroups are decremented before
// disconnect.
p.wg.Done() p.wg.Done()
p.Disconnect(exitErr) p.Disconnect(exitErr)