aboutsummaryrefslogtreecommitdiffstats
path: root/process.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-08-15 17:18:45 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-08-15 17:18:45 +0000
commitb26f8003c301e7cfbeb5b9329f3254e858222cdc (patch)
tree9b05da6427c4a8c8296524c91f9a488bd2cf860f /process.c
parent6df786c79fda2b174785f983ec976b158534c669 (diff)
downloadruby-b26f8003c301e7cfbeb5b9329f3254e858222cdc.tar.gz
* process.c (rb_clock_gettime): add CLOCK_MONOTONIC support on OS X.
http://developer.apple.com/library/mac/qa/qa1398/_index.html [Feature #8658] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r--process.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/process.c b/process.c
index 7600b53ba6..da09b15194 100644
--- a/process.c
+++ b/process.c
@@ -82,6 +82,10 @@
#include <grp.h>
#endif
+#ifdef __APPLE__
+# include <mach/mach_time.h>
+#endif
+
#if defined(HAVE_TIMES) || defined(_WIN32)
static VALUE rb_cProcessTms;
#endif
@@ -6743,6 +6747,23 @@ rb_clock_gettime(int argc, VALUE *argv)
ts.tv_nsec = 0;
goto success;
}
+
+#ifdef __APPLE__
+#define RUBY_MACH_ABSOLUTE_TIME_CLOCK_MONOTONIC ID2SYM(rb_intern("MACH_ABSOLUTE_TIME_CLOCK_MONOTONIC"))
+ if (clk_id == RUBY_MACH_ABSOLUTE_TIME_CLOCK_MONOTONIC) {
+ static mach_timebase_info_data_t sTimebaseInfo;
+ uint64_t t = mach_absolute_time();
+
+ if ( sTimebaseInfo.denom == 0 ) {
+ (void) mach_timebase_info(&sTimebaseInfo);
+ }
+
+ t = t * sTimebaseInfo.numer / sTimebaseInfo.denom;
+ ts.tv_sec = t / 1000000000;
+ ts.tv_nsec = t % 1000000000;
+ goto success;
+ }
+#endif
}
else {
#if defined(HAVE_CLOCK_GETTIME)
@@ -7066,6 +7087,8 @@ Init_process(void)
#endif
#ifdef CLOCK_MONOTONIC
rb_define_const(rb_mProcess, "CLOCK_MONOTONIC", CLOCKID2NUM(CLOCK_MONOTONIC));
+#elif defined(RUBY_MACH_ABSOLUTE_TIME_CLOCK_MONOTONIC)
+ rb_define_const(rb_mProcess, "CLOCK_MONOTONIC", RUBY_MACH_ABSOLUTE_TIME_CLOCK_MONOTONIC);
#endif
#ifdef CLOCK_PROCESS_CPUTIME_ID
rb_define_const(rb_mProcess, "CLOCK_PROCESS_CPUTIME_ID", CLOCKID2NUM(CLOCK_PROCESS_CPUTIME_ID));