code: func (r *sentReq) retrieveLoop() {
  	go r.tryRequest()
  	r.lastReqQueued = true
  	state := r.stateRequesting
  
  	for state != nil {
  		state = state()
  	}
  
  	r.rm.lock.Lock()
  	delete(r.rm.sentReqs, r.id)
  	r.rm.lock.Unlock()
  }
docs: // retrieveLoop is the retrieval state machine event loop