diff --git a/src/util/timestamp.cc b/src/util/timestamp.cc index 2e2efe2..59a833f 100644 --- a/src/util/timestamp.cc +++ b/src/util/timestamp.cc @@ -48,6 +48,16 @@ #include #endif +// On Apple systems CLOCK_MONOTONIC is unfortunately able to go +// backwards in time. This breaks mosh when system is returning from +// suspend as described in ticket #1014. To avoid this issue prefer +// CLOCK_MONOTONIC_RAW on Apple systems when available. +#if defined(__APPLE__) && defined(CLOCK_MONOTONIC_RAW) +#define CLOCKTYPE CLOCK_MONOTONIC_RAW +#else +#define CLOCKTYPE CLOCK_MONOTONIC +#endif + static uint64_t millis_cache = -1; uint64_t frozen_timestamp( void ) @@ -73,7 +83,7 @@ void freeze_timestamp( void ) // Check for presence, for OS X SDK >= 10.12 and runtime < 10.12 &clock_gettime != NULL && #endif - clock_gettime( CLOCK_MONOTONIC, &tp ) == 0 ) { + clock_gettime( CLOCKTYPE, &tp ) == 0 ) { uint64_t millis = tp.tv_nsec / 1000000; millis += uint64_t( tp.tv_sec ) * 1000;