[NOD-400] Fix ECHM cache crashing on concurrent access. (#450)

This commit is contained in:
stasatdaglabs 2019-11-04 17:38:01 +02:00 committed by Ori Newman
parent 13f06ca293
commit a8f0d7b05b

View File

@ -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
}