breacharbiter: avoid infinite loop in exactRetribution
After a shutdown has been initiated, both registrations for spend ntfns and publishing txns can fail. The current behavior in the face of such failures is to continue trying, which is fine if we are online. However, this causes an infinite loop during shutdown, and lnd cannot exit since the routine is tracked by the brar's waitgroup. A simple fix is to select on the brar's quit channel after detecting a failure from either, allowing the breach arbiter to break out of this death cycle.
This commit is contained in:
parent
7bbcbc6fea
commit
3021a246f1
@ -519,8 +519,17 @@ secondLevelCheck:
|
|||||||
brarLog.Errorf("unable to check for spentness "+
|
brarLog.Errorf("unable to check for spentness "+
|
||||||
"of out_point=%v: %v",
|
"of out_point=%v: %v",
|
||||||
breachedOutput.outpoint, err)
|
breachedOutput.outpoint, err)
|
||||||
|
|
||||||
|
// Registration may have failed if we've been
|
||||||
|
// instructed to shutdown. If so, return here to
|
||||||
|
// avoid entering an infinite loop.
|
||||||
|
select {
|
||||||
|
case <-b.quit:
|
||||||
|
return
|
||||||
|
default:
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
// The output has been taken to the second level!
|
// The output has been taken to the second level!
|
||||||
@ -575,9 +584,17 @@ secondLevelCheck:
|
|||||||
brarLog.Infof("Attempting to transfer HTLC revocations " +
|
brarLog.Infof("Attempting to transfer HTLC revocations " +
|
||||||
"to the second level")
|
"to the second level")
|
||||||
finalTx = nil
|
finalTx = nil
|
||||||
|
|
||||||
|
// Txn publication may fail if we're shutting down.
|
||||||
|
// If so, return to avoid entering an infinite loop.
|
||||||
|
select {
|
||||||
|
case <-b.quit:
|
||||||
|
return
|
||||||
|
default:
|
||||||
goto secondLevelCheck
|
goto secondLevelCheck
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// As a conclusionary step, we register for a notification to be
|
// As a conclusionary step, we register for a notification to be
|
||||||
// dispatched once the justice tx is confirmed. After confirmation we
|
// dispatched once the justice tx is confirmed. After confirmation we
|
||||||
|
Loading…
Reference in New Issue
Block a user