https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116586

            Bug ID: 116586
           Summary: All uses of absolute timeouts should correctly handle
                    negative times
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

POSIX doesn't require any APIs to handle times before the epoch, so any time we
have a chrono::time_point that gets converted to a timespec and passed to
something like pthread_cond_timedwait or sem_timedwait we should check for
negative time points.

It seems reasonable to assume the system clock is not set to a time before the
epoch, so we can just treat any negative time_point as being in the past and so
timeout immediately.

For timeouts that use the steady_clock I think we can also assume the clock's
unspecified epoch is in the past, i.e. that steady_clock::now() is always a
non-negative time point. That's true for linux. POSIX says the clock gives you
the time since some unspecified point in the past, which I hope means "since an
unspecified epoch, which is guaranteed to be in the past".

We have a patch for std::future timeouts:
https://patchwork.sourceware.org/project/gcc/patch/20240724131238.271095-1-william.t...@sifive.com/

condition_variable and timed mutexes and __platform_semaphore need a fix.

Reply via email to