routing/chainview: fix race condition in neutrino implementation
This commit is contained in:
parent
9fd70958f4
commit
7d30634757
@ -22,7 +22,14 @@ import (
|
|||||||
"github.com/roasbeef/btcd/wire"
|
"github.com/roasbeef/btcd/wire"
|
||||||
"github.com/roasbeef/btcutil"
|
"github.com/roasbeef/btcutil"
|
||||||
|
|
||||||
|
// Required to auto-register the btcd backed ChainNotifier
|
||||||
|
// implementation.
|
||||||
_ "github.com/lightningnetwork/lnd/chainntnfs/btcdnotify"
|
_ "github.com/lightningnetwork/lnd/chainntnfs/btcdnotify"
|
||||||
|
|
||||||
|
// Required to auto-register the neutrino backed ChainNotifier
|
||||||
|
// implementation.
|
||||||
|
_ "github.com/lightningnetwork/lnd/chainntnfs/neutrinonotify"
|
||||||
|
|
||||||
_ "github.com/roasbeef/btcwallet/walletdb/bdb" // Required to register the boltdb walletdb implementation.
|
_ "github.com/roasbeef/btcwallet/walletdb/bdb" // Required to register the boltdb walletdb implementation.
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ func testFilterBlockNotifications(node *rpctest.Harness,
|
|||||||
case filteredBlock := <-blockChan:
|
case filteredBlock := <-blockChan:
|
||||||
assertFilteredBlock(t, filteredBlock, currentHeight,
|
assertFilteredBlock(t, filteredBlock, currentHeight,
|
||||||
newBlockHashes[0], []*chainhash.Hash{})
|
newBlockHashes[0], []*chainhash.Hash{})
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
t.Fatalf("filtered block notification didn't arrive")
|
t.Fatalf("filtered block notification didn't arrive")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ func testFilterBlockNotifications(node *rpctest.Harness,
|
|||||||
case filteredBlock := <-blockChan:
|
case filteredBlock := <-blockChan:
|
||||||
assertFilteredBlock(t, filteredBlock, currentHeight+1,
|
assertFilteredBlock(t, filteredBlock, currentHeight+1,
|
||||||
newBlockHashes[0], []*chainhash.Hash{spendTxid1})
|
newBlockHashes[0], []*chainhash.Hash{spendTxid1})
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
t.Fatalf("filtered block notification didn't arrive")
|
t.Fatalf("filtered block notification didn't arrive")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,7 +248,7 @@ func testFilterBlockNotifications(node *rpctest.Harness,
|
|||||||
case filteredBlock := <-blockChan:
|
case filteredBlock := <-blockChan:
|
||||||
assertFilteredBlock(t, filteredBlock, currentHeight+2,
|
assertFilteredBlock(t, filteredBlock, currentHeight+2,
|
||||||
newBlockHashes[0], []*chainhash.Hash{spendTxid2})
|
newBlockHashes[0], []*chainhash.Hash{spendTxid2})
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
t.Fatalf("filtered block notification didn't arrive")
|
t.Fatalf("filtered block notification didn't arrive")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,7 +282,7 @@ func testUpdateFilterBackTrack(node *rpctest.Harness, chainView FilteredChainVie
|
|||||||
case filteredBlock := <-blockChan:
|
case filteredBlock := <-blockChan:
|
||||||
assertFilteredBlock(t, filteredBlock, currentHeight,
|
assertFilteredBlock(t, filteredBlock, currentHeight,
|
||||||
initBlockHashes[0], []*chainhash.Hash{})
|
initBlockHashes[0], []*chainhash.Hash{})
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
t.Fatalf("filtered block notification didn't arrive")
|
t.Fatalf("filtered block notification didn't arrive")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +314,7 @@ func testUpdateFilterBackTrack(node *rpctest.Harness, chainView FilteredChainVie
|
|||||||
case filteredBlock := <-blockChan:
|
case filteredBlock := <-blockChan:
|
||||||
assertFilteredBlock(t, filteredBlock, currentHeight+1,
|
assertFilteredBlock(t, filteredBlock, currentHeight+1,
|
||||||
newBlockHashes[0], []*chainhash.Hash{})
|
newBlockHashes[0], []*chainhash.Hash{})
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
t.Fatalf("filtered block notification didn't arrive")
|
t.Fatalf("filtered block notification didn't arrive")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +332,7 @@ func testUpdateFilterBackTrack(node *rpctest.Harness, chainView FilteredChainVie
|
|||||||
case filteredBlock := <-blockChan:
|
case filteredBlock := <-blockChan:
|
||||||
assertFilteredBlock(t, filteredBlock, currentHeight+1,
|
assertFilteredBlock(t, filteredBlock, currentHeight+1,
|
||||||
newBlockHashes[0], []*chainhash.Hash{spendTxid})
|
newBlockHashes[0], []*chainhash.Hash{spendTxid})
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
t.Fatalf("filtered block notification didn't arrive")
|
t.Fatalf("filtered block notification didn't arrive")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,7 +373,7 @@ func testFilterSingleBlock(node *rpctest.Harness, chainView FilteredChainView,
|
|||||||
case filteredBlock := <-blockChan:
|
case filteredBlock := <-blockChan:
|
||||||
assertFilteredBlock(t, filteredBlock, currentHeight,
|
assertFilteredBlock(t, filteredBlock, currentHeight,
|
||||||
newBlockHashes[0], []*chainhash.Hash{})
|
newBlockHashes[0], []*chainhash.Hash{})
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
t.Fatalf("filtered block notification didn't arrive")
|
t.Fatalf("filtered block notification didn't arrive")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -414,7 +414,7 @@ func testFilterSingleBlock(node *rpctest.Harness, chainView FilteredChainView,
|
|||||||
case filteredBlock := <-blockChan:
|
case filteredBlock := <-blockChan:
|
||||||
assertFilteredBlock(t, filteredBlock, currentHeight+1,
|
assertFilteredBlock(t, filteredBlock, currentHeight+1,
|
||||||
block.Hash(), []*chainhash.Hash{})
|
block.Hash(), []*chainhash.Hash{})
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
t.Fatalf("filtered block notification didn't arrive")
|
t.Fatalf("filtered block notification didn't arrive")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,12 @@ func (c *CfFilteredChainView) FilterBlock(blockHash *chainhash.Hash) (*FilteredB
|
|||||||
for _, tx := range block.Transactions() {
|
for _, tx := range block.Transactions() {
|
||||||
for _, txIn := range tx.MsgTx().TxIn {
|
for _, txIn := range tx.MsgTx().TxIn {
|
||||||
prevOp := txIn.PreviousOutPoint
|
prevOp := txIn.PreviousOutPoint
|
||||||
if _, ok := c.chainFilter[prevOp]; ok {
|
|
||||||
|
c.filterMtx.RLock()
|
||||||
|
_, ok := c.chainFilter[prevOp]
|
||||||
|
c.filterMtx.RUnlock()
|
||||||
|
|
||||||
|
if ok {
|
||||||
filteredTxns = append(filteredTxns, tx.MsgTx())
|
filteredTxns = append(filteredTxns, tx.MsgTx())
|
||||||
|
|
||||||
c.filterMtx.Lock()
|
c.filterMtx.Lock()
|
||||||
|
Loading…
Reference in New Issue
Block a user