code: func getTmpROC(s *imagestore.Store, path string) (*removeOnClose, error) {
  	h := sha512.New()
  	h.Write([]byte(path))
  	pathHash := s.HashToKey(h)
  
  	tmp, err := s.TmpNamedFile(pathHash)
  	if err != nil {
  		return nil, errwrap.Wrap(errors.New("error setting up temporary file"), err)
  	}
  
  	// let's lock the file to avoid concurrent writes to the temporary file, it
  	// will go away when removing the temp file
  	_, err = lock.TryExclusiveLock(tmp.Name(), lock.RegFile)
  	if err != nil {
  		if err != lock.ErrLocked {
  			return nil, errwrap.Wrap(errors.New("failed to lock temporary file"), err)
  		}
  		log.Printf("another rkt instance is downloading this file, waiting...")
  		_, err = lock.ExclusiveLock(tmp.Name(), lock.RegFile)
  		if err != nil {
  			return nil, errwrap.Wrap(errors.New("failed to lock temporary file"), err)
  		}
  	}
  
  	return &removeOnClose{File: tmp}, nil
  }
docs: // getTmpROC returns a removeOnClose instance wrapping a temporary
  // file provided by the passed store. The actual file name is based on
  // a hash of the passed path.