mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-01-21 04:50:24 +01:00
Use monotonic clock for _dbus_get_current_time() if it's available.
_dbus_get_current_time() is used for timeouts, but uses gettimeofday(), which relies on the wall clock time, which can change. If the time is changed forwards or backwards, the timeouts are no longer valid, so the monotonic clock must be used. https://bugs.freedesktop.org/show_bug.cgi?id=25624 Signed-off-by: Colin Walters <walters@verbum.org>
This commit is contained in:
parent
0607bdb676
commit
1c6596eb52
1 changed files with 12 additions and 1 deletions
|
|
@ -2036,7 +2036,8 @@ _dbus_poll (DBusPollFD *fds,
|
|||
}
|
||||
|
||||
/**
|
||||
* Get current time, as in gettimeofday().
|
||||
* Get current time, as in gettimeofday(). Use the monotonic clock if
|
||||
* available, to avoid problems when the system time changes.
|
||||
*
|
||||
* @param tv_sec return location for number of seconds
|
||||
* @param tv_usec return location for number of microseconds (thousandths)
|
||||
|
|
@ -2047,12 +2048,22 @@ _dbus_get_current_time (long *tv_sec,
|
|||
{
|
||||
struct timeval t;
|
||||
|
||||
#ifdef HAVE_MONOTONIC_CLOCK
|
||||
struct timespec ts;
|
||||
clock_gettime (CLOCK_MONOTONIC, &ts);
|
||||
|
||||
if (tv_sec)
|
||||
*tv_sec = ts.tv_sec;
|
||||
if (tv_usec)
|
||||
*tv_usec = ts.tv_nsec / 1000;
|
||||
#else
|
||||
gettimeofday (&t, NULL);
|
||||
|
||||
if (tv_sec)
|
||||
*tv_sec = t.tv_sec;
|
||||
if (tv_usec)
|
||||
*tv_usec = t.tv_usec;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue