From e669e900177eb594f019582ba2365a5815dc09e7 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Wed, 11 Jul 2018 17:37:54 -0700 Subject: [PATCH] fundingmanager: retrieve peer before resuming funding flow --- fundingmanager.go | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/fundingmanager.go b/fundingmanager.go index ea0653c5..1aaf8c66 100644 --- a/fundingmanager.go +++ b/fundingmanager.go @@ -23,6 +23,7 @@ import ( "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/keychain" + "github.com/lightningnetwork/lnd/lnpeer" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwire" @@ -553,16 +554,29 @@ func (f *fundingManager) Start() error { // resume wait on startup. case shortChanID, ok := <-confChan: if !ok { - fndgLog.Errorf("waiting for funding" + + fndgLog.Errorf("Waiting for funding" + "confirmation failed") return } - // Success, funding transaction was confirmed. - err := f.handleFundingConfirmation(ch, shortChanID) + // The funding transaction has confirmed, so + // 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 { - fndgLog.Errorf("failed to handle funding"+ - "confirmation: %v", err) + fndgLog.Errorf("Failed to handle "+ + "funding confirmation: %v", err) return } } @@ -620,10 +634,21 @@ func (f *fundingManager) Start() error { go func(dbChan *channeldb.OpenChannel) { 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 { - fndgLog.Errorf("failed to handle funding"+ - "confirmation: %v", err) + fndgLog.Errorf("Failed to handle "+ + "funding confirmation: %v", err) return } }(channel)