code: func (j *janitorRunner) handleDeath(worker string) error {
  	mu, err := j.getLock(worker)
  	if err != nil {
  		return err
  	}
  	defer mu.Unlock()
  
  	cnx := j.pool.Get()
  	defer cnx.Close()
  
  	if err := j.janitor.OnPreConcat(cnx, worker); err != nil {
  		return err
  	}
  
  	_, err = j.availableTasks.Concat(
  		getWorkingQueueName(j.availableTasks.Source(), worker))
  	if err != nil && err != redis.ErrNil {
  		return err
  	}
  	j.detector.Purge(worker)
  
  	return j.janitor.OnPostConcat(cnx, worker)
  }
docs: // Processes a dead worker, moving its queue back to the main queue and
  // calling the disposer function if we get a lock on it.