code: func (l *latch) recycle(currentTS uint64) int {
  	total := 0
  	fakeHead := node{next: l.queue}
  	prev := &fakeHead
  	for curr := prev.next; curr != nil; curr = curr.next {
  		if tsoSub(currentTS, curr.maxCommitTS) >= expireDuration && curr.value == nil {
  			l.count--
  			prev.next = curr.next
  			total++
  		} else {
  			prev = curr
  		}
  	}
  	l.queue = fakeHead.next
  	return total
  }
docs: // recycle is not thread safe, the latch should acquire its lock before executing this function.