From 54bbdff1e4a26ae65760cbddfa9cd886e8e03613 Mon Sep 17 00:00:00 2001
From: atvanguard <93arpit@gmail.com>
Date: Wed, 6 May 2020 16:35:12 +0530
Subject: [PATCH] Initialize apiCache in once.do

---
 consensus/bor/api.go | 31 +++++++++++++------------------
 1 file changed, 13 insertions(+), 18 deletions(-)

diff --git a/consensus/bor/api.go b/consensus/bor/api.go
index ca64cd552..d5de0a61c 100644
--- a/consensus/bor/api.go
+++ b/consensus/bor/api.go
@@ -35,6 +35,7 @@ import (
 var (
 	// MaxCheckpointLength is the maximum number of blocks that can be requested for constructing a checkpoint root hash
 	MaxCheckpointLength = uint64(math.Pow(2, 15))
+	once                sync.Once
 )
 
 // API is a user facing RPC API to allow controlling the signer and voting
@@ -123,11 +124,18 @@ func (api *API) GetCurrentValidators() ([]*Validator, error) {
 
 // GetRootHash returns the merkle root of the start to end block headers
 func (api *API) GetRootHash(start int64, end int64) ([]byte, error) {
-	key := getKey(start, end)
-	if root, err := api.lookupCache(key); err != nil {
+	var err error
+	once.Do(func() {
+		if api.rootHashCache == nil {
+			api.rootHashCache, err = lru.NewARC(10)
+		}
+	})
+	if err != nil {
 		return nil, err
-	} else if root != nil {
-		return root, nil
+	}
+	key := getRootHashKey(start, end)
+	if root, known := api.rootHashCache.Get(key); known {
+		return root.([]byte), nil
 	}
 	length := uint64(end - start + 1)
 	if length > MaxCheckpointLength {
@@ -176,19 +184,6 @@ func (api *API) GetRootHash(start int64, end int64) ([]byte, error) {
 	return root, nil
 }
 
-func (api *API) lookupCache(key string) ([]byte, error) {
-	var err error
-	if api.rootHashCache == nil {
-		if api.rootHashCache, err = lru.NewARC(10); err != nil {
-			return nil, err
-		}
-	}
-	if root, known := api.rootHashCache.Get(key); known {
-		return root.([]byte), nil
-	}
-	return nil, nil
-}
-
-func getKey(start int64, end int64) string {
+func getRootHashKey(start int64, end int64) string {
 	return strconv.FormatInt(start, 10) + "-" + strconv.FormatInt(end, 10)
 }
-- 
GitLab