mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00
[NOD-400] Fix ECHM cache crashing on concurrent access. (#450)
This commit is contained in:
parent
13f06ca293
commit
a8f0d7b05b
@ -6,11 +6,15 @@ import (
|
||||
"github.com/daglabs/btcd/util/daghash"
|
||||
"github.com/daglabs/btcd/wire"
|
||||
"github.com/golang/groupcache/lru"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const ecmhCacheSize = 4_000_000
|
||||
|
||||
var ecmhCache = lru.New(ecmhCacheSize)
|
||||
var (
|
||||
ecmhCache = lru.New(ecmhCacheSize)
|
||||
ecmhCacheLock sync.Mutex
|
||||
)
|
||||
|
||||
func utxoMultiset(entry *UTXOEntry, outpoint *wire.Outpoint) (*btcec.Multiset, error) {
|
||||
w := &bytes.Buffer{}
|
||||
@ -20,6 +24,10 @@ func utxoMultiset(entry *UTXOEntry, outpoint *wire.Outpoint) (*btcec.Multiset, e
|
||||
}
|
||||
serializedUTXO := w.Bytes()
|
||||
utxoHash := daghash.DoubleHashH(serializedUTXO)
|
||||
|
||||
ecmhCacheLock.Lock()
|
||||
defer ecmhCacheLock.Unlock()
|
||||
|
||||
if cachedMSPoint, ok := ecmhCache.Get(utxoHash); ok {
|
||||
return cachedMSPoint.(*btcec.Multiset), nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user