From ea6aca26a5cbea5264388ba13f0f6b0e694638aa Mon Sep 17 00:00:00 2001 From: "Johan T. Halseth" Date: Tue, 31 Jul 2018 11:31:28 +0200 Subject: [PATCH] channeldb: make chanStatus unexported Since the ChanStatus field can be changed from concurrent callers, we make it unexported and add the method ChanStatus() for safe retrieval. --- channeldb/channel.go | 28 ++++++++++++++++++---------- channeldb/db.go | 2 +- peer.go | 2 +- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/channeldb/channel.go b/channeldb/channel.go index bc9547615..7cdfb73ee 100644 --- a/channeldb/channel.go +++ b/channeldb/channel.go @@ -8,14 +8,14 @@ import ( "net" "sync" - "github.com/coreos/bbolt" - "github.com/lightningnetwork/lnd/keychain" - "github.com/lightningnetwork/lnd/lnwire" - "github.com/lightningnetwork/lnd/shachain" "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" + "github.com/coreos/bbolt" + "github.com/lightningnetwork/lnd/keychain" + "github.com/lightningnetwork/lnd/lnwire" + "github.com/lightningnetwork/lnd/shachain" ) var ( @@ -354,9 +354,9 @@ type OpenChannel struct { // negotiate fees, or close the channel. IsInitiator bool - // ChanStatus is the current status of this channel. If it is not in + // chanStatus is the current status of this channel. If it is not in // the state Default, it should not be used for forwarding payments. - ChanStatus ChannelStatus + chanStatus ChannelStatus // FundingBroadcastHeight is the height in which the funding // transaction was broadcast. This value can be used by higher level @@ -468,6 +468,14 @@ func (c *OpenChannel) ShortChanID() lnwire.ShortChannelID { return c.ShortChannelID } +// ChanStatus returns the current ChannelStatus of this channel. +func (c *OpenChannel) ChanStatus() ChannelStatus { + c.RLock() + defer c.RUnlock() + + return c.chanStatus +} + // RefreshShortChanID updates the in-memory short channel ID using the latest // value observed on disk. func (c *OpenChannel) RefreshShortChanID() error { @@ -705,7 +713,7 @@ func (c *OpenChannel) putChanStatus(status ChannelStatus) error { return err } - channel.ChanStatus = status + channel.chanStatus = status return putOpenChannel(chanBucket, channel) }); err != nil { @@ -713,7 +721,7 @@ func (c *OpenChannel) putChanStatus(status ChannelStatus) error { } // Update the in-memory representation to keep it in sync with the DB. - c.ChanStatus = status + c.chanStatus = status return nil } @@ -2067,7 +2075,7 @@ func putChanInfo(chanBucket *bolt.Bucket, channel *OpenChannel) error { if err := WriteElements(&w, channel.ChanType, channel.ChainHash, channel.FundingOutpoint, channel.ShortChannelID, channel.IsPending, channel.IsInitiator, - channel.ChanStatus, channel.FundingBroadcastHeight, + channel.chanStatus, channel.FundingBroadcastHeight, channel.NumConfsRequired, channel.ChannelFlags, channel.IdentityPub, channel.Capacity, channel.TotalMSatSent, channel.TotalMSatReceived, @@ -2177,7 +2185,7 @@ func fetchChanInfo(chanBucket *bolt.Bucket, channel *OpenChannel) error { if err := ReadElements(r, &channel.ChanType, &channel.ChainHash, &channel.FundingOutpoint, &channel.ShortChannelID, &channel.IsPending, &channel.IsInitiator, - &channel.ChanStatus, &channel.FundingBroadcastHeight, + &channel.chanStatus, &channel.FundingBroadcastHeight, &channel.NumConfsRequired, &channel.ChannelFlags, &channel.IdentityPub, &channel.Capacity, &channel.TotalMSatSent, &channel.TotalMSatReceived, diff --git a/channeldb/db.go b/channeldb/db.go index 4d6958a3d..f3b6ede1d 100644 --- a/channeldb/db.go +++ b/channeldb/db.go @@ -456,7 +456,7 @@ func fetchChannels(d *DB, pending, waitingClose bool) ([]*OpenChannel, error) { // than Default, then it means it is // waiting to be closed. channelWaitingClose := - channel.ChanStatus != Default + channel.ChanStatus() != Default // Only include it if we requested // channels with the same waitingClose diff --git a/peer.go b/peer.go index 822425b39..f97a1c521 100644 --- a/peer.go +++ b/peer.go @@ -333,7 +333,7 @@ func (p *peer) loadActiveChannels(chans []*channeldb.OpenChannel) error { // Skip adding any permanently irreconcilable channels to the // htlcswitch. - if dbChan.ChanStatus != channeldb.Default { + if dbChan.ChanStatus() != channeldb.Default { peerLog.Warnf("ChannelPoint(%v) has status %v, won't "+ "start.", chanPoint, dbChan.ChanStatus) lnChan.Stop()