// default size (currently 4) is used instead.
MaxBlocks int
- cache map[string]*cacheBlock
- mtx sync.Mutex
- setupOnce sync.Once
+ cache map[string]*cacheBlock
+ mtx sync.Mutex
}
const defaultMaxBlocks = 4
// Get returns data from the cache, first retrieving it from Keep if
// necessary.
func (c *BlockCache) Get(kc *KeepClient, locator string) ([]byte, error) {
- c.setupOnce.Do(c.setup)
cacheKey := locator[:32]
c.mtx.Lock()
+ if c.cache == nil {
+ c.cache = make(map[string]*cacheBlock)
+ }
b, ok := c.cache[cacheKey]
if !ok || b.err != nil {
b = &cacheBlock{
rdr, size, _, err := kc.Get(locator)
var data []byte
if err == nil {
- data := make([]byte, size, BLOCKSIZE)
+ data = make([]byte, size, BLOCKSIZE)
_, err = io.ReadFull(rdr, data)
err2 := rdr.Close()
if err == nil {
}
}
c.mtx.Lock()
- b.data, b.err = data.Bytes(), err
+ b.data, b.err = data, err
c.mtx.Unlock()
close(b.fetched)
go c.Sweep()
return b.data, b.err
}
-func (c *BlockCache) setup() {
- c.cache = make(map[string]*cacheBlock)
-}
-
func (c *BlockCache) Clear() {
c.mtx.Lock()
- c.setup()
+ c.cache = nil
c.mtx.Unlock()
}