fundingmanager: retrieve peer before resuming funding flow

This commit is contained in:
Wilmer Paulino 2018-07-11 17:37:54 -07:00
parent 6d4da72156
commit e669e90017
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F

@ -23,6 +23,7 @@ import (
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/htlcswitch"
"github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnpeer"
"github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
@ -553,16 +554,29 @@ func (f *fundingManager) Start() error {
// resume wait on startup. // resume wait on startup.
case shortChanID, ok := <-confChan: case shortChanID, ok := <-confChan:
if !ok { if !ok {
fndgLog.Errorf("waiting for funding" + fndgLog.Errorf("Waiting for funding" +
"confirmation failed") "confirmation failed")
return return
} }
// Success, funding transaction was confirmed. // The funding transaction has confirmed, so
err := f.handleFundingConfirmation(ch, shortChanID) // we'll attempt to retrieve the remote peer
// to complete the rest of the funding flow.
peerChan := make(chan lnpeer.Peer, 1)
f.cfg.NotifyWhenOnline(ch.IdentityPub, peerChan)
var peer lnpeer.Peer
select {
case peer = <-peerChan:
case <-f.quit:
return
}
err := f.handleFundingConfirmation(
peer, ch, shortChanID,
)
if err != nil { if err != nil {
fndgLog.Errorf("failed to handle funding"+ fndgLog.Errorf("Failed to handle "+
"confirmation: %v", err) "funding confirmation: %v", err)
return return
} }
} }
@ -620,10 +634,21 @@ func (f *fundingManager) Start() error {
go func(dbChan *channeldb.OpenChannel) { go func(dbChan *channeldb.OpenChannel) {
defer f.wg.Done() defer f.wg.Done()
err := f.handleFundingConfirmation(dbChan, shortChanID) peerChan := make(chan lnpeer.Peer, 1)
f.cfg.NotifyWhenOnline(dbChan.IdentityPub, peerChan)
var peer lnpeer.Peer
select {
case peer = <-peerChan:
case <-f.quit:
return
}
err := f.handleFundingConfirmation(
peer, dbChan, shortChanID,
)
if err != nil { if err != nil {
fndgLog.Errorf("failed to handle funding"+ fndgLog.Errorf("Failed to handle "+
"confirmation: %v", err) "funding confirmation: %v", err)
return return
} }
}(channel) }(channel)