code: func (c *convergence) crashedActualLRPs(logger lager.Logger, now time.Time) {
  	logger = logger.Session("crashed-actual-lrps")
  	restartCalculator := models.NewDefaultRestartCalculator()
  
  	rows, err := c.selectCrashedLRPs(logger, c.db)
  	if err != nil {
  		logger.Error("failed-query", err)
  		return
  	}
  
  	for rows.Next() {
  		var index int
  		actual := &models.ActualLRP{}
  
  		schedulingInfo, err := c.fetchDesiredLRPSchedulingInfoAndMore(logger, rows, &index, &actual.Since, &actual.CrashCount)
  		if err != nil {
  			continue
  		}
  
  		actual.ActualLRPKey = models.NewActualLRPKey(schedulingInfo.ProcessGuid, int32(index), schedulingInfo.Domain)
  		actual.State = models.ActualLRPStateCrashed
  
  		if actual.ShouldRestartCrash(now, restartCalculator) {
  			c.unstartedLRPKeys = append(c.unstartedLRPKeys, &models.ActualLRPKeyWithSchedulingInfo{
  				Key:            &actual.ActualLRPKey,
  				SchedulingInfo: schedulingInfo,
  			})
  			logger.Info("creating-start-request",
  				lager.Data{"reason": "crashed-instance", "process_guid": actual.ProcessGuid, "index": index})
  		}
  	}
  
  	if rows.Err() != nil {
  		logger.Error("failed-getting-next-row", rows.Err())
  	}
  
  	return
  }
docs: // Adds CRASHED Actual LRPs that can be restarted to the list of start requests
  // and transitions them to UNCLAIMED.