mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-06-16 11:51:10 +02:00
contractcourt: fix concurrent access to launched
This commit is contained in:
parent
4f5ccb8650
commit
d2e81a19fd
@ -178,13 +178,13 @@ var _ ContractResolver = (*anchorResolver)(nil)
|
|||||||
|
|
||||||
// Launch offers the anchor output to the sweeper.
|
// Launch offers the anchor output to the sweeper.
|
||||||
func (c *anchorResolver) Launch() error {
|
func (c *anchorResolver) Launch() error {
|
||||||
if c.launched {
|
if c.isLaunched() {
|
||||||
c.log.Tracef("already launched")
|
c.log.Tracef("already launched")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
c.log.Debugf("launching resolver...")
|
c.log.Debugf("launching resolver...")
|
||||||
c.launched = true
|
c.markLaunched()
|
||||||
|
|
||||||
// If we're already resolved, then we can exit early.
|
// If we're already resolved, then we can exit early.
|
||||||
if c.IsResolved() {
|
if c.IsResolved() {
|
||||||
|
@ -130,13 +130,13 @@ var _ ContractResolver = (*breachResolver)(nil)
|
|||||||
//
|
//
|
||||||
// TODO(yy): implement it once the outputs are offered to the sweeper.
|
// TODO(yy): implement it once the outputs are offered to the sweeper.
|
||||||
func (b *breachResolver) Launch() error {
|
func (b *breachResolver) Launch() error {
|
||||||
if b.launched {
|
if b.isLaunched() {
|
||||||
b.log.Tracef("already launched")
|
b.log.Tracef("already launched")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
b.log.Debugf("launching resolver...")
|
b.log.Debugf("launching resolver...")
|
||||||
b.launched = true
|
b.markLaunched()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -368,13 +368,13 @@ var _ reportingContractResolver = (*commitSweepResolver)(nil)
|
|||||||
|
|
||||||
// Launch constructs a commit input and offers it to the sweeper.
|
// Launch constructs a commit input and offers it to the sweeper.
|
||||||
func (c *commitSweepResolver) Launch() error {
|
func (c *commitSweepResolver) Launch() error {
|
||||||
if c.launched {
|
if c.isLaunched() {
|
||||||
c.log.Tracef("already launched")
|
c.log.Tracef("already launched")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
c.log.Debugf("launching resolver...")
|
c.log.Debugf("launching resolver...")
|
||||||
c.launched = true
|
c.markLaunched()
|
||||||
|
|
||||||
// If we're already resolved, then we can exit early.
|
// If we're already resolved, then we can exit early.
|
||||||
if c.IsResolved() {
|
if c.IsResolved() {
|
||||||
|
@ -118,8 +118,11 @@ type contractResolverKit struct {
|
|||||||
sweepResultChan chan sweep.Result
|
sweepResultChan chan sweep.Result
|
||||||
|
|
||||||
// launched specifies whether the resolver has been launched. Calling
|
// launched specifies whether the resolver has been launched. Calling
|
||||||
// `Launch` will be a no-op if this is true.
|
// `Launch` will be a no-op if this is true. This value is not saved to
|
||||||
launched bool
|
// db, as it's fine to relaunch a resolver after a restart. It's only
|
||||||
|
// used to avoid resending requests to the sweeper when a new blockbeat
|
||||||
|
// is received.
|
||||||
|
launched atomic.Bool
|
||||||
|
|
||||||
// resolved reflects if the contract has been fully resolved or not.
|
// resolved reflects if the contract has been fully resolved or not.
|
||||||
resolved atomic.Bool
|
resolved atomic.Bool
|
||||||
@ -154,6 +157,16 @@ func (r *contractResolverKit) markResolved() {
|
|||||||
r.resolved.Store(true)
|
r.resolved.Store(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isLaunched returns true if the resolver has been launched.
|
||||||
|
func (r *contractResolverKit) isLaunched() bool {
|
||||||
|
return r.launched.Load()
|
||||||
|
}
|
||||||
|
|
||||||
|
// markLaunched marks the resolver as launched.
|
||||||
|
func (r *contractResolverKit) markLaunched() {
|
||||||
|
r.launched.Store(true)
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// errResolverShuttingDown is returned when the resolver stops
|
// errResolverShuttingDown is returned when the resolver stops
|
||||||
// progressing because it received the quit signal.
|
// progressing because it received the quit signal.
|
||||||
|
@ -83,7 +83,7 @@ func (h *htlcIncomingContestResolver) processFinalHtlcFail() error {
|
|||||||
func (h *htlcIncomingContestResolver) Launch() error {
|
func (h *htlcIncomingContestResolver) Launch() error {
|
||||||
// NOTE: we don't mark this resolver as launched as the inner resolver
|
// NOTE: we don't mark this resolver as launched as the inner resolver
|
||||||
// will set it when it's launched.
|
// will set it when it's launched.
|
||||||
if h.launched {
|
if h.isLaunched() {
|
||||||
h.log.Tracef("already launched")
|
h.log.Tracef("already launched")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ func newOutgoingContestResolver(res lnwallet.OutgoingHtlcResolution,
|
|||||||
func (h *htlcOutgoingContestResolver) Launch() error {
|
func (h *htlcOutgoingContestResolver) Launch() error {
|
||||||
// NOTE: we don't mark this resolver as launched as the inner resolver
|
// NOTE: we don't mark this resolver as launched as the inner resolver
|
||||||
// will set it when it's launched.
|
// will set it when it's launched.
|
||||||
if h.launched {
|
if h.isLaunched() {
|
||||||
h.log.Tracef("already launched")
|
h.log.Tracef("already launched")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -730,13 +730,13 @@ func (h *htlcSuccessResolver) resolveSuccessTxOutput(op wire.OutPoint) error {
|
|||||||
// Launch creates an input based on the details of the incoming htlc resolution
|
// Launch creates an input based on the details of the incoming htlc resolution
|
||||||
// and offers it to the sweeper.
|
// and offers it to the sweeper.
|
||||||
func (h *htlcSuccessResolver) Launch() error {
|
func (h *htlcSuccessResolver) Launch() error {
|
||||||
if h.launched {
|
if h.isLaunched() {
|
||||||
h.log.Tracef("already launched")
|
h.log.Tracef("already launched")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
h.log.Debugf("launching resolver...")
|
h.log.Debugf("launching resolver...")
|
||||||
h.launched = true
|
h.markLaunched()
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
// If we're already resolved, then we can exit early.
|
// If we're already resolved, then we can exit early.
|
||||||
|
@ -1270,13 +1270,13 @@ func (h *htlcTimeoutResolver) resolveTimeoutTxOutput(op wire.OutPoint) error {
|
|||||||
// Launch creates an input based on the details of the outgoing htlc resolution
|
// Launch creates an input based on the details of the outgoing htlc resolution
|
||||||
// and offers it to the sweeper.
|
// and offers it to the sweeper.
|
||||||
func (h *htlcTimeoutResolver) Launch() error {
|
func (h *htlcTimeoutResolver) Launch() error {
|
||||||
if h.launched {
|
if h.isLaunched() {
|
||||||
h.log.Tracef("already launched")
|
h.log.Tracef("already launched")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
h.log.Debugf("launching resolver...")
|
h.log.Debugf("launching resolver...")
|
||||||
h.launched = true
|
h.markLaunched()
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
// If we're already resolved, then we can exit early.
|
// If we're already resolved, then we can exit early.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user