// Listen for errors in lock renewal. If the lock can't be renewed, we need to // 1) stop replication and 2) communicate the error up a level // If replication finishes, destroy the lock func (r replication) handleRenewalErrors(lock kp.Lock, renewalErrCh chan error) { defer func() { close(r.quitCh) close(r.errCh) lock.Destroy() }() select { case <-r.replicationDoneCh: case <-r.replicationCancelledCh: case err := <-renewalErrCh: // communicate the error to the caller. r.errCh <- replicationError{ err: err, isFatal: true, } return } }