code: func (r *HandlerRegistry) Launching(cname string) (*LaunchState, bool) {
  	r.mutex.Lock()
  	defer r.mutex.Unlock()
  
  	// launch happened or already happening
  	if launchState, ok := r.launching[cname]; ok {
  		return launchState, true
  	}
  
  	// handler registered without going through launch
  	if _, ok := r.handlers[cname]; ok {
  		launchState := NewLaunchState()
  		launchState.Notify(nil)
  		return launchState, true
  	}
  
  	// first attempt to launch so the runtime needs to start
  	launchState := NewLaunchState()
  	r.launching[cname] = launchState
  	return launchState, false
  }
docs: // Launching indicates that chaincode is being launched. The LaunchState that
  // is returned provides mechanisms to determine when the operation has
  // completed and whether or not it failed. The bool indicates whether or not
  // the chaincode has already been started.