@@ -9,14 +9,14 @@ import (
99
1010type proofsCache struct {
1111 mutProofsCache sync.RWMutex
12- proofsByNonceBuckets sync. Map
12+ proofsByNonceBuckets map [ uint64 ] * proofNonceBucket
1313 bucketSize uint64
1414 proofsByHash map [string ]data.HeaderProofHandler
1515}
1616
1717func newProofsCache (bucketSize int ) * proofsCache {
1818 return & proofsCache {
19- proofsByNonceBuckets : sync. Map {} ,
19+ proofsByNonceBuckets : make ( map [ uint64 ] * proofNonceBucket ) ,
2020 bucketSize : uint64 (bucketSize ),
2121 proofsByHash : make (map [string ]data.HeaderProofHandler ),
2222 }
@@ -55,10 +55,13 @@ func (pc *proofsCache) getBucketKey(index uint64) uint64 {
5555func (pc * proofsCache ) insertProofByNonce (proof data.HeaderProofHandler ) {
5656 bucketKey := pc .getBucketKey (proof .GetHeaderNonce ())
5757
58- bucket , _ := pc .proofsByNonceBuckets .LoadOrStore (bucketKey , newProofBucket ())
58+ bucket , ok := pc .proofsByNonceBuckets [bucketKey ]
59+ if ! ok {
60+ bucket = newProofBucket ()
61+ pc .proofsByNonceBuckets [bucketKey ] = bucket
62+ }
5963
60- b := bucket .(* proofNonceBucket )
61- b .insert (proof )
64+ bucket .insert (proof )
6265}
6366
6467func (pc * proofsCache ) cleanupProofsBehindNonce (nonce uint64 ) {
@@ -69,17 +72,18 @@ func (pc *proofsCache) cleanupProofsBehindNonce(nonce uint64) {
6972 pc .mutProofsCache .Lock ()
7073 defer pc .mutProofsCache .Unlock ()
7174
72- pc .proofsByNonceBuckets .Range (func (key , value interface {}) bool {
73- bucket := value .(* proofNonceBucket )
75+ bucketsToDelete := make ([]uint64 , 0 )
7476
77+ for key , bucket := range pc .proofsByNonceBuckets {
7578 if nonce > bucket .maxNonce {
7679 pc .cleanupProofsInBucket (bucket )
77- pc . proofsByNonceBuckets . Delete ( key )
80+ bucketsToDelete = append ( bucketsToDelete , key )
7881 }
82+ }
7983
80- return true
81- } )
82-
84+ for _ , key := range bucketsToDelete {
85+ delete ( pc . proofsByNonceBuckets , key )
86+ }
8387}
8488
8589func (pc * proofsCache ) cleanupProofsInBucket (bucket * proofNonceBucket ) {
0 commit comments