From cb276426d8669cf3031f68ef583dc125addd4704 Mon Sep 17 00:00:00 2001 From: "jkand.huang" Date: Wed, 29 Apr 2020 16:10:27 +0800 Subject: [PATCH] live555: change time from gettimeofday to clock_gettime. Signed-off-by: jkand.huang --- groupsock/GroupsockHelper.cpp | 88 ++-------------------------- groupsock/include/GroupsockHelper.hh | 8 +-- groupsock/include/NetCommon.h | 2 +- 3 files changed, 8 insertions(+), 90 deletions(-) diff --git a/groupsock/GroupsockHelper.cpp b/groupsock/GroupsockHelper.cpp index 9821931..16b3ab1 100644 --- a/groupsock/GroupsockHelper.cpp +++ b/groupsock/GroupsockHelper.cpp @@ -26,7 +26,7 @@ extern "C" int initializeWinsockIfNecessary(); #else #include #include -#include +//#include #include #define initializeWinsockIfNecessary() 1 #endif @@ -758,87 +758,11 @@ char const* timestampString() { return (char const*)&timeString; } -#if (defined(__WIN32__) || defined(_WIN32)) && !defined(__MINGW32__) -// For Windoze, we need to implement our own gettimeofday() - -// used to make sure that static variables in gettimeofday() aren't initialized simultaneously by multiple threads -static LONG initializeLock_gettimeofday = 0; - -#if !defined(_WIN32_WCE) -#include -#endif - int gettimeofday(struct timeval* tp, int* /*tz*/) { - static LARGE_INTEGER tickFrequency, epochOffset; - - static Boolean isInitialized = False; - - LARGE_INTEGER tickNow; - -#if !defined(_WIN32_WCE) - QueryPerformanceCounter(&tickNow); -#else - tickNow.QuadPart = GetTickCount(); -#endif - - if (!isInitialized) { - if(1 == InterlockedIncrement(&initializeLock_gettimeofday)) { -#if !defined(_WIN32_WCE) - // For our first call, use "ftime()", so that we get a time with a proper epoch. - // For subsequent calls, use "QueryPerformanceCount()", because it's more fine-grain. - struct timeb tb; - ftime(&tb); - tp->tv_sec = tb.time; - tp->tv_usec = 1000*tb.millitm; - - // Also get our counter frequency: - QueryPerformanceFrequency(&tickFrequency); -#else - /* FILETIME of Jan 1 1970 00:00:00. */ - const LONGLONG epoch = 116444736000000000LL; - FILETIME fileTime; - LARGE_INTEGER time; - GetSystemTimeAsFileTime(&fileTime); - - time.HighPart = fileTime.dwHighDateTime; - time.LowPart = fileTime.dwLowDateTime; - - // convert to from 100ns time to unix timestamp in seconds, 1000*1000*10 - tp->tv_sec = (long)((time.QuadPart - epoch) / 10000000L); - - /* - GetSystemTimeAsFileTime has just a seconds resolution, - thats why wince-version of gettimeofday is not 100% accurate, usec accuracy would be calculated like this: - // convert 100 nanoseconds to usec - tp->tv_usec= (long)((time.QuadPart - epoch)%10000000L) / 10L; - */ - tp->tv_usec = 0; - - // resolution of GetTickCounter() is always milliseconds - tickFrequency.QuadPart = 1000; -#endif - // compute an offset to add to subsequent counter times, so we get a proper epoch: - epochOffset.QuadPart - = tp->tv_sec * tickFrequency.QuadPart + (tp->tv_usec * tickFrequency.QuadPart) / 1000000L - tickNow.QuadPart; - - // next caller can use ticks for time calculation - isInitialized = True; - return 0; - } else { - InterlockedDecrement(&initializeLock_gettimeofday); - // wait until first caller has initialized static values - while(!isInitialized){ - Sleep(1); - } - } - } - - // adjust our tick count so that we get a proper epoch: - tickNow.QuadPart += epochOffset.QuadPart; - - tp->tv_sec = (long)(tickNow.QuadPart / tickFrequency.QuadPart); - tp->tv_usec = (long)(((tickNow.QuadPart % tickFrequency.QuadPart) * 1000000L) / tickFrequency.QuadPart); - + struct timespec timeNow = {0, 0}; + clock_gettime(CLOCK_MONOTONIC, &timeNow); + tp->tv_sec = timeNow.tv_sec; + tp->tv_usec = timeNow.tv_nsec/1000; return 0; } -#endif + diff --git a/groupsock/include/GroupsockHelper.hh b/groupsock/include/GroupsockHelper.hh index 8ca4275..0313d67 100644 --- a/groupsock/include/GroupsockHelper.hh +++ b/groupsock/include/GroupsockHelper.hh @@ -129,13 +129,7 @@ struct _groupsockPriv { // There should be only one of these allocated _groupsockPriv* groupsockPriv(UsageEnvironment& env); // allocates it if necessary void reclaimGroupsockPriv(UsageEnvironment& env); - -#if (defined(__WIN32__) || defined(_WIN32)) && !defined(__MINGW32__) -// For Windoze, we need to implement our own gettimeofday() -extern int gettimeofday(struct timeval*, int*); -#else -#include -#endif +int gettimeofday(struct timeval*, int*); // The following are implemented in inet.c: extern "C" netAddressBits our_inet_addr(char const*); diff --git a/groupsock/include/NetCommon.h b/groupsock/include/NetCommon.h index 4ec115b..9495a66 100644 --- a/groupsock/include/NetCommon.h +++ b/groupsock/include/NetCommon.h @@ -93,7 +93,7 @@ typedef unsigned char u_int8_t; /* Unix */ #include #include -#include +//#include #include #include #include -- 2.26.1