diff options
author | Kacper Michajłow <kasper93@gmail.com> | 2023-09-15 16:52:27 +0200 |
---|---|---|
committer | Dudemanguy <random342@airmail.cc> | 2023-09-29 20:48:58 +0000 |
commit | 318b5471a18e464cfcd1f7222da7853b7056f9fc (patch) | |
tree | 83eee44726747e83fa626289d4febc25d377ce48 /osdep/win32 | |
parent | d2630877132edac876779ff31ae61685f09199c4 (diff) | |
download | mpv-318b5471a18e464cfcd1f7222da7853b7056f9fc.tar.bz2 mpv-318b5471a18e464cfcd1f7222da7853b7056f9fc.tar.xz |
win32/pthread: don't convert time through unrelated timer
Just keep it directly as mp_time for internal implementation.
Diffstat (limited to 'osdep/win32')
-rw-r--r-- | osdep/win32/pthread.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/osdep/win32/pthread.c b/osdep/win32/pthread.c index a178d72253..905f1107f7 100644 --- a/osdep/win32/pthread.c +++ b/osdep/win32/pthread.c @@ -23,6 +23,7 @@ #include <assert.h> #include <windows.h> +#include "common/common.h" #include "osdep/timer.h" // mp_{start,end}_hires_timers int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) @@ -95,22 +96,11 @@ int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) { - // mpv uses mingw's gettimeofday() as time source too. - struct timeval tv; - gettimeofday(&tv, NULL); - DWORD timeout_ms = 0; - if (abstime->tv_sec >= INT64_MAX / 10000) { - timeout_ms = INFINITE; - } else if (abstime->tv_sec >= tv.tv_sec) { - long long msec = (abstime->tv_sec - tv.tv_sec) * 1000LL + - abstime->tv_nsec / 1000LL / 1000LL - tv.tv_usec / 1000LL; - if (msec > INT_MAX) { - timeout_ms = INFINITE; - } else if (msec > 0) { - timeout_ms = msec; - } - } - return cond_wait(cond, mutex, timeout_ms); + // mp time is not converted to realtime if internal pthread impl is used + int64_t now = mp_time_ns(); + int64_t time_ns = abstime->tv_sec * UINT64_C(1000000000) + abstime->tv_nsec; + int64_t timeout_ms = (time_ns - now) / INT64_C(1000000); + return cond_wait(cond, mutex, MPCLAMP(timeout_ms, 0, INFINITE)); } int pthread_cond_wait(pthread_cond_t *restrict cond, |