summaryrefslogtreecommitdiff
path: root/thread.c
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-18 00:38:45 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-18 00:38:45 +0000
commit014e9a4a1823a72ced2dd5923792b30cec3dc6af (patch)
treef7eb3fc3f1b8d7e0c5d49038641b7d353f8ff9da /thread.c
parentb160a1139e8155a96d4f6f1adf3a62f0c5a5d863 (diff)
thread.c: introduce timespec_cmp for timespec comparisons
This hopefully improves readability when comparing timespecs. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62456 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/thread.c b/thread.c
index 89a1adbccd..d9da33e58c 100644
--- a/thread.c
+++ b/thread.c
@@ -1197,6 +1197,26 @@ timespec_sub(struct timespec *dst, const struct timespec *tv)
}
}
+static int
+timespec_cmp(const struct timespec *a, const struct timespec *b)
+{
+ if (a->tv_sec > b->tv_sec) {
+ return 1;
+ }
+ else if (a->tv_sec < b->tv_sec) {
+ return -1;
+ }
+ else {
+ if (a->tv_nsec > b->tv_nsec) {
+ return 1;
+ }
+ else if (a->tv_nsec < b->tv_nsec) {
+ return -1;
+ }
+ return 0;
+ }
+}
+
/*
* @end is the absolute time when @ts is set to expire
* Returns true if @end has past
@@ -1208,8 +1228,7 @@ timespec_update_expire(struct timespec *ts, const struct timespec *end)
struct timespec now;
getclockofday(&now);
- if (end->tv_sec < now.tv_sec) return 1;
- if (end->tv_sec == now.tv_sec && end->tv_nsec <= now.tv_nsec) return 1;
+ if (timespec_cmp(&now, end) >= 0) return 1;
thread_debug("timespec_update_expire: "
"%"PRI_TIMET_PREFIX"d.%.6ld > %"PRI_TIMET_PREFIX"d.%.6ld\n",
(time_t)end->tv_sec, (long)end->tv_nsec,