diff options
-rw-r--r-- | winsup/cygwin/ChangeLog | 6 | ||||
-rw-r--r-- | winsup/cygwin/hires.h | 2 | ||||
-rw-r--r-- | winsup/cygwin/times.cc | 7 |
3 files changed, 11 insertions, 4 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 5024aab6f..b6b81eb03 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2013-04-11 Corinna Vinschen <corinna@vinschen.de> + + * hires.h (hires_ns::nsecs): Declare with bool parameter. + * times.cc (hires_ns::nsecs): Take bool parameter. If set to true, + don't use prime value (== return system wide absolute value). + 2013-04-08 Christopher Faylor <me.cygwin2013@cgf.cx> * cygtls.h (_cygtls::reset_signal_arrived): Actually reset the diff --git a/winsup/cygwin/hires.h b/winsup/cygwin/hires.h index c9a4def38..0135a80d4 100644 --- a/winsup/cygwin/hires.h +++ b/winsup/cygwin/hires.h @@ -48,7 +48,7 @@ class hires_ns : public hires_base double freq; void prime (); public: - LONGLONG nsecs (); + LONGLONG nsecs (bool monotonic = false); LONGLONG usecs () {return nsecs () / 1000LL;} LONGLONG resolution(); }; diff --git a/winsup/cygwin/times.cc b/winsup/cygwin/times.cc index 764a49076..407f7c479 100644 --- a/winsup/cygwin/times.cc +++ b/winsup/cygwin/times.cc @@ -477,7 +477,7 @@ hires_ns::prime () } LONGLONG -hires_ns::nsecs () +hires_ns::nsecs (bool monotonic) { if (!inited) prime (); @@ -495,7 +495,8 @@ hires_ns::nsecs () } // FIXME: Use round() here? - now.QuadPart = (LONGLONG) (freq * (double) (now.QuadPart - primed_pc.QuadPart)); + now.QuadPart = (LONGLONG) (freq * (double) + (now.QuadPart - (monotonic ? 0LL : primed_pc.QuadPart))); return now.QuadPart; } @@ -642,7 +643,7 @@ clock_gettime (clockid_t clk_id, struct timespec *tp) case CLOCK_MONOTONIC: { - LONGLONG now = ntod.nsecs (); + LONGLONG now = ntod.nsecs (true); if (now == (LONGLONG) -1) return -1; |