code: func (q *TransmitLimitedQueue) walkReadOnlyLocked(reverse bool, f func(*limitedBroadcast) bool) {
  	if q.lenLocked() == 0 {
  		return
  	}
  
  	iter := func(item btree.Item) bool {
  		cur := item.(*limitedBroadcast)
  
  		prevTransmits := cur.transmits
  		prevMsgLen := cur.msgLen
  		prevID := cur.id
  
  		keepGoing := f(cur)
  
  		if prevTransmits != cur.transmits || prevMsgLen != cur.msgLen || prevID != cur.id {
  			panic("edited queue while walking read only")
  		}
  
  		return keepGoing
  	}
  
  	if reverse {
  		q.tq.Descend(iter) // end with transmit 0
  	} else {
  		q.tq.Ascend(iter) // start with transmit 0
  	}
  }
docs: // walkReadOnlyLocked calls f for each item in the queue traversing it in
  // natural order (by Less) when reverse=false and the opposite when true. You
  // must hold the mutex.
  //
  // This method panics if you attempt to mutate the item during traversal.  The
  // underlying btree should also not be mutated during traversal.