code: func (s *sharedPullerState) fail(err error) {
  	s.mut.Lock()
  	defer s.mut.Unlock()
  
  	s.failLocked(err)
  }
docs: // fail sets the error on the puller state compose of error, and marks the
  // sharedPullerState as failed. Is a no-op when called on an already failed state.