diff --git a/pkg/fsutils/linecache.go b/pkg/fsutils/linecache.go index a651a504..10f31422 100644 --- a/pkg/fsutils/linecache.go +++ b/pkg/fsutils/linecache.go @@ -3,6 +3,7 @@ package fsutils import ( "bytes" "fmt" + "sync" "github.com/pkg/errors" ) @@ -10,13 +11,12 @@ import ( type fileLinesCache [][]byte type LineCache struct { - files map[string]fileLinesCache + files sync.Map fileCache *FileCache } func NewLineCache(fc *FileCache) *LineCache { return &LineCache{ - files: map[string]fileLinesCache{}, fileCache: fc, } } @@ -53,9 +53,9 @@ func (lc *LineCache) getRawLine(filePath string, index0 int) ([]byte, error) { } func (lc *LineCache) getFileCache(filePath string) (fileLinesCache, error) { - fc := lc.files[filePath] - if fc != nil { - return fc, nil + loadedFc, ok := lc.files.Load(filePath) + if ok { + return loadedFc.(fileLinesCache), nil } fileBytes, err := lc.fileCache.GetFileBytes(filePath) @@ -63,7 +63,7 @@ func (lc *LineCache) getFileCache(filePath string) (fileLinesCache, error) { return nil, errors.Wrapf(err, "can't get file %s bytes from cache", filePath) } - fc = bytes.Split(fileBytes, []byte("\n")) - lc.files[filePath] = fc + fc := bytes.Split(fileBytes, []byte("\n")) + lc.files.Store(filePath, fileLinesCache(fc)) return fc, nil }