code: func (s *Sleeper) Fetch(block bool) (id int, ok bool) {
  	for {
  		w := s.nextWaker(block)
  		if w == nil {
  			return -1, false
  		}
  
  		// Reassociate the waker with the sleeper. If the waker was
  		// still asserted we can return it, otherwise try the next one.
  		old := (*Sleeper)(atomic.SwapPointer(&w.s, usleeper(s)))
  		if old == &assertedSleeper {
  			return w.id, true
  		}
  	}
  }
docs: // Fetch fetches the next wake-up notification. If a notification is immediately
  // available, it is returned right away. Otherwise, the behavior depends on the
  // value of 'block': if true, the current goroutine blocks until a notification
  // arrives, then returns it; if false, returns 'ok' as false.
  //
  // When 'ok' is true, the value of 'id' corresponds to the id associated with
  // the waker; when 'ok' is false, 'id' is undefined.
  //
  // N.B. This method is *not* thread-safe. Only one goroutine at a time is
  //      allowed to call this method.