diff options
Diffstat (limited to 'src/third_party/wiredtiger/src/support/time.c')
-rw-r--r-- | src/third_party/wiredtiger/src/support/time.c | 98 |
1 files changed, 46 insertions, 52 deletions
diff --git a/src/third_party/wiredtiger/src/support/time.c b/src/third_party/wiredtiger/src/support/time.c index d6ad80f07dc..1f06e7480c7 100644 --- a/src/third_party/wiredtiger/src/support/time.c +++ b/src/third_party/wiredtiger/src/support/time.c @@ -10,89 +10,83 @@ /* * __time_check_monotonic -- - * Check and prevent time running backward. If we detect that it has, we - * set the time structure to the previous values, making time stand still - * until we see a time in the future of the highest value seen so far. + * Check and prevent time running backward. If we detect that it has, we set the time structure + * to the previous values, making time stand still until we see a time in the future of the + * highest value seen so far. */ static void __time_check_monotonic(WT_SESSION_IMPL *session, struct timespec *tsp) { - /* - * Detect time going backward. If so, use the last - * saved timestamp. - */ - if (session == NULL) - return; + /* + * Detect time going backward. If so, use the last saved timestamp. + */ + if (session == NULL) + return; - if (tsp->tv_sec < session->last_epoch.tv_sec || - (tsp->tv_sec == session->last_epoch.tv_sec && - tsp->tv_nsec < session->last_epoch.tv_nsec)) { - WT_STAT_CONN_INCR(session, time_travel); - *tsp = session->last_epoch; - } else - session->last_epoch = *tsp; + if (tsp->tv_sec < session->last_epoch.tv_sec || + (tsp->tv_sec == session->last_epoch.tv_sec && tsp->tv_nsec < session->last_epoch.tv_nsec)) { + WT_STAT_CONN_INCR(session, time_travel); + *tsp = session->last_epoch; + } else + session->last_epoch = *tsp; } /* * __wt_epoch -- - * Return the time since the Epoch. + * Return the time since the Epoch. */ void __wt_epoch(WT_SESSION_IMPL *session, struct timespec *tsp) - WT_GCC_FUNC_ATTRIBUTE((visibility("default"))) + WT_GCC_FUNC_ATTRIBUTE((visibility("default"))) { - struct timespec tmp; + struct timespec tmp; - /* - * Read into a local variable, then check for monotonically increasing - * time, ensuring single threads never see time move backward. We don't - * prevent multiple threads from seeing time move backwards (even when - * reading time serially, the saved last-read time is per thread, not - * per timer, so multiple threads can race the time). Nor do we prevent - * multiple threads simultaneously reading the time from seeing random - * time or time moving backwards (assigning the time structure to the - * returned memory location implies multicycle writes to memory). - */ - __wt_epoch_raw(session, &tmp); - __time_check_monotonic(session, &tmp); - *tsp = tmp; + /* + * Read into a local variable, then check for monotonically increasing time, ensuring single + * threads never see time move backward. We don't prevent multiple threads from seeing time move + * backwards (even when reading time serially, the saved last-read time is per thread, not per + * timer, so multiple threads can race the time). Nor do we prevent multiple threads + * simultaneously reading the time from seeing random time or time moving backwards (assigning + * the time structure to the returned memory location implies multicycle writes to memory). + */ + __wt_epoch_raw(session, &tmp); + __time_check_monotonic(session, &tmp); + *tsp = tmp; } /* * __wt_seconds -- - * Return the seconds since the Epoch. + * Return the seconds since the Epoch. */ void __wt_seconds(WT_SESSION_IMPL *session, uint64_t *secondsp) - WT_GCC_FUNC_ATTRIBUTE((visibility("default"))) + WT_GCC_FUNC_ATTRIBUTE((visibility("default"))) { - struct timespec t; + struct timespec t; - __wt_epoch(session, &t); + __wt_epoch(session, &t); - /* - * A time_t isn't guaranteed to fit into a uint64_t, but it's asserted - * when WiredTiger builds. - */ - *secondsp = (uint64_t)t.tv_sec; + /* + * A time_t isn't guaranteed to fit into a uint64_t, but it's asserted when WiredTiger builds. + */ + *secondsp = (uint64_t)t.tv_sec; } /* * __wt_clock_to_nsec -- - * Convert from clock ticks to nanoseconds. + * Convert from clock ticks to nanoseconds. */ uint64_t __wt_clock_to_nsec(uint64_t end, uint64_t begin) { - double clock_diff; + double clock_diff; - /* - * If the ticks were reset, consider it an invalid check and just - * return zero as the time difference because we cannot compute - * anything meaningful. - */ - if (end < begin) - return (0); - clock_diff = (double)(end - begin); - return ((uint64_t)(clock_diff / __wt_process.tsc_nsec_ratio)); + /* + * If the ticks were reset, consider it an invalid check and just return zero as the time + * difference because we cannot compute anything meaningful. + */ + if (end < begin) + return (0); + clock_diff = (double)(end - begin); + return ((uint64_t)(clock_diff / __wt_process.tsc_nsec_ratio)); } |