bool waitFor()

in dispenso/detail/completion_event_impl.h [148:171]


  bool waitFor(int completedStatus, const std::chrono::duration<double>& relTime) const {
    if (status_.load(std::memory_order_acquire) == completedStatus) {
      return true;
    }

    double relSeconds = relTime.count();
    if (relSeconds <= 0.0) {
      return false;
    }

    mach_timespec_t ts;
    ts.tv_sec = static_cast<uint32_t>(relSeconds);
    relSeconds -= ts.tv_sec;
    ts.tv_nsec = static_cast<clock_res_t>(1e9 * relSeconds);

    // TODO: determine if we should worry about reducing timeout time subsequent times through the
    // loop in the case of spurious wake.
    while (status_.load(std::memory_order_acquire) != completedStatus) {
      if (semaphore_timedwait(sem_, ts) == KERN_OPERATION_TIMED_OUT) {
        return status_.load(std::memory_order_acquire) == completedStatus;
      }
    }
    return true;
  }