func()

in lambda/internal/tarfile/s3file.go [280:305]


func (p *LRUBlockPool) GetBlock(id int64, blockInitFn func(*Block) error) (block *Block, err error) {
	p.mutex.Lock()
	defer p.mutex.Unlock()
	val, hit := p.cache.Get(id)
	if hit {
		if block, ok := val.(*Block); ok {
			return block, nil
		} else {
			return nil, errors.New("get an invalid block from cache")
		}
	} else {
		logrus.Debugf("LRUBlockPool: miss block#%d", id)
		if (p.cache.MaxEntries != 0) && (p.cache.Len() >= p.cache.MaxEntries) {
			p.cache.RemoveOldest()
		}
		blk := p.pool.Get()
		if block, ok := blk.(*Block); ok {
			block.Id = id
			err = blockInitFn(block)
			p.cache.Add(id, block)
			return block, err
		} else {
			return nil, errors.New("get an invalid block from pool")
		}
	}
}