From: Poseidon Date: Tue, 24 Dec 2019 11:52:15 +0000 (+0800) Subject: fix lru bug (#469) X-Git-Tag: v1.1.0~6 X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=commitdiff_plain;h=8ca571fcd4ad57b3c7a520654b5c77fca8a89735 fix lru bug (#469) * fix lru bug * remove blanck line --- diff --git a/database/store.go b/database/store.go index c4cdda63..1970543b 100644 --- a/database/store.go +++ b/database/store.go @@ -331,14 +331,18 @@ func (s *Store) SaveChainStatus(blockHeader, irrBlockHeader *types.BlockHeader, return err } - for _, result := range consensusResults { + var clearCacheFuncs []func() + for _, consensusResult := range consensusResults { + result := consensusResult bytes, err := json.Marshal(result) if err != nil { return err } batch.Set(calcConsensusResultKey(result.Seq), bytes) - s.cache.removeConsensusResult(result) + clearCacheFuncs = append(clearCacheFuncs, func() { + s.cache.removeConsensusResult(result) + }) } blockHash := blockHeader.Hash() @@ -355,7 +359,8 @@ func (s *Store) SaveChainStatus(blockHeader, irrBlockHeader *types.BlockHeader, batch.Set([]byte{blockStore}, bytes) // save main chain blockHeaders - for _, bh := range mainBlockHeaders { + for _, blockHeader := range mainBlockHeaders { + bh := blockHeader blockHash := bh.Hash() binaryBlockHash, err := blockHash.MarshalText() if err != nil { @@ -363,15 +368,24 @@ func (s *Store) SaveChainStatus(blockHeader, irrBlockHeader *types.BlockHeader, } batch.Set(calcMainChainIndexPrefix(bh.Height), binaryBlockHash) - s.cache.removeMainChainHash(bh.Height) + clearCacheFuncs = append(clearCacheFuncs, func() { + s.cache.removeMainChainHash(bh.Height) + }) } if currentStatus != nil { for i := blockHeader.Height + 1; i <= currentStatus.Height; i++ { - batch.Delete(calcMainChainIndexPrefix(i)) - s.cache.removeMainChainHash(i) + index := i + batch.Delete(calcMainChainIndexPrefix(index)) + clearCacheFuncs = append(clearCacheFuncs, func() { + s.cache.removeMainChainHash(index) + }) } } batch.Write() + + for _, clearCacheFunc := range clearCacheFuncs { + clearCacheFunc() + } return nil }