summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--OpenAL32/Include/alMain.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index 4d963563..d6fc5c15 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -184,16 +184,26 @@ static __inline void DeleteCriticalSection(CRITICAL_SECTION *cs)
* as opposed to the actual time. */
static __inline ALuint timeGetTime(void)
{
- int ret;
#if _POSIX_TIMERS > 0
+ static int hasmono = 0;
struct timespec ts;
+ int ret = -1;
- ret = clock_gettime(CLOCK_REALTIME, &ts);
+#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK >= 0)
+#if _POSIX_MONOTONIC_CLOCK == 0
+ if(hasmono > 0 || (hasmono == 0 &&
+ (hasmono=sysconf(_SC_MONOTONIC_CLOCK)) > 0))
+#endif
+ ret = clock_gettime(CLOCK_MONOTONIC, &ts);
+#endif
+ if(ret != 0)
+ ret = clock_gettime(CLOCK_REALTIME, &ts);
assert(ret == 0);
return ts.tv_nsec/1000000 + ts.tv_sec*1000;
#else
struct timeval tv;
+ int ret;
ret = gettimeofday(&tv, NULL);
assert(ret == 0);