diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2013-05-22 04:08:57 -0500 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2013-05-22 12:56:14 +0000 |
commit | ac769f929d3e26bd9804789e9ef0bd20080fe4a7 (patch) | |
tree | 6982db87a941ffc5eb15fecda2bfd6c9c1eb4b5a /sal/osl | |
parent | 15ffe4f935e133c17a242cc8c758fd9d9d1fb172 (diff) |
Revert "Thread-safe version of osl_getGlobalTime"
This reverts commit d8d55787b81cdc955b73c8befa4ab608f46e32aa.
and 9b76439dff638d6fd773f2b63c377c2124810a39
as the change failed to work correctly on MacOSX causing a CPU-Loop
in UpdateCheckThread::run()
Change-Id: Ide86a5b7dce9550bbc15dfe691d4ed6199a88cc3
Reviewed-on: https://gerrit.libreoffice.org/4002
Reviewed-by: Norbert Thiebaud <nthiebaud@gmail.com>
Tested-by: Norbert Thiebaud <nthiebaud@gmail.com>
Diffstat (limited to 'sal/osl')
-rw-r--r-- | sal/osl/unx/salinit.cxx | 4 | ||||
-rw-r--r-- | sal/osl/unx/time.c | 94 | ||||
-rw-r--r-- | sal/osl/w32/salinit.cxx | 4 | ||||
-rw-r--r-- | sal/osl/w32/time.c | 12 |
4 files changed, 31 insertions, 83 deletions
diff --git a/sal/osl/unx/salinit.cxx b/sal/osl/unx/salinit.cxx index c71c6a3d67ac..327ca0e0d0c5 100644 --- a/sal/osl/unx/salinit.cxx +++ b/sal/osl/unx/salinit.cxx @@ -38,9 +38,6 @@ extern bool sal_use_syslog; extern "C" { -//From time.c -void sal_initGlobalTimer(); - void sal_detail_initialize(int argc, char ** argv) { #if defined MACOSX // On Mac OS X, soffice can restart itself via exec (see restartOnMac in @@ -67,7 +64,6 @@ void sal_detail_initialize(int argc, char ** argv) { close(fd); } #endif - sal_initGlobalTimer(); #if HAVE_SYSLOG_H const char *use_syslog = getenv("SAL_LOG_SYSLOG"); sal_use_syslog = use_syslog != NULL && !strcmp(use_syslog, "1"); diff --git a/sal/osl/unx/time.c b/sal/osl/unx/time.c index b71dd7d6f875..c99036babc67 100644 --- a/sal/osl/unx/time.c +++ b/sal/osl/unx/time.c @@ -23,15 +23,9 @@ #include <osl/diagnose.h> #include <osl/time.h> #include <time.h> -#include <assert.h> -#include <unistd.h> - -#if defined(MACOSX) || defined(IOS) -#include <mach/mach_time.h> -#endif /* FIXME: detection should be done in configure script */ -#if defined(MACOSX) || defined(IOS) || defined(FREEBSD) || defined(NETBSD) || \ +#if defined(MACOSX) || defined(FREEBSD) || defined(NETBSD) || \ defined(LINUX) || defined(OPENBSD) || defined(DRAGONFLY) #define STRUCT_TM_HAS_GMTOFF 1 @@ -39,36 +33,20 @@ #define HAS_ALTZONE 1 #endif -#if defined(MACOSX) || defined(IOS) -typedef sal_uInt64 osl_time_t; -static double adjust_time_factor; -#else -#if defined(_POSIX_TIMERS) -#define USE_CLOCK_GETTIME -typedef struct timespec osl_time_t; -#else -typedef struct timeval osl_time_t; -#endif -#endif -static osl_time_t startTime; - - /*-------------------------------------------------- * osl_getSystemTime *-------------------------------------------------*/ sal_Bool SAL_CALL osl_getSystemTime(TimeValue* tv) { -#if defined(MACOSX) || defined(IOS) - double diff = (double)(mach_absolute_time() - startTime) * adjust_time_factor; - tv->Seconds = (sal_uInt32)diff; - tv->Nanosec = (sal_uInt32)((diff - tv->Seconds) * 1e9); -#else int res; - osl_time_t tp; -#if defined(USE_CLOCK_GETTIME) +#if defined(LINUX) + struct timespec tp; + res = clock_gettime(CLOCK_REALTIME, &tp); #else + struct timeval tp; + res = gettimeofday(&tp, NULL); #endif @@ -78,12 +56,12 @@ sal_Bool SAL_CALL osl_getSystemTime(TimeValue* tv) } tv->Seconds = tp.tv_sec; - #if defined(USE_CLOCK_GETTIME) + #if defined(LINUX) tv->Nanosec = tp.tv_nsec; #else tv->Nanosec = tp.tv_usec * 1000; #endif -#endif + return sal_True; } @@ -275,54 +253,28 @@ sal_Bool SAL_CALL osl_getSystemTimeFromLocalTime( TimeValue* pLocalTimeVal, Time return sal_False; } -void sal_initGlobalTimer() -{ -#if defined(MACOSX) || defined(IOS) - mach_timebase_info_data_t timebase; - mach_timebase_info(&timebase); - adjust_time_factor = 1e-9 * (double)timebase.numer / (double)(timebase.denom); - startTime = mach_absolute_time(); -#else /* ! (MACOSX || IOS) */ - int res; -#if defined(USE_CLOCK_GETTIME) - res = clock_gettime(CLOCK_REALTIME, &startTime); -#else /* Ndef USE_CLOCK_GETTIME */ - res = gettimeofday( &startTime, NULL ); -#endif /* NDef USE_CLOCK_GETTIME */ - assert(res == 0); - (void) res; -#endif /* ! (MACOSX || IOS) */ -} + + +static struct timeval startTime; +static sal_Bool bGlobalTimer = sal_False; sal_uInt32 SAL_CALL osl_getGlobalTimer() { - sal_uInt32 nSeconds; + struct timeval currentTime; + sal_uInt32 nSeconds; -#if defined(MACOSX) || defined(IOS) - double diff = (double)(mach_absolute_time() - startTime) * adjust_time_factor * 1000; - nSeconds = (sal_uInt32)diff; -#else - osl_time_t currentTime; - int res; + // FIXME: not thread safe !! + if ( bGlobalTimer == sal_False ) + { + gettimeofday( &startTime, NULL ); + bGlobalTimer=sal_True; + } -#if defined(USE_CLOCK_GETTIME) - res = clock_gettime(CLOCK_REALTIME, ¤tTime); -#else - res = gettimeofday( ¤tTime, NULL ); -#endif - assert(res == 0); + gettimeofday( ¤tTime, NULL ); - if (res != 0) - return 0; + nSeconds = (sal_uInt32)( currentTime.tv_sec - startTime.tv_sec ); - nSeconds = (sal_uInt32)( currentTime.tv_sec - startTime.tv_sec ); -#if defined(USE_CLOCK_GETTIME) - nSeconds = ( nSeconds * 1000 ) + (long) (( currentTime.tv_nsec - startTime.tv_nsec) / 1000000 ); -#else - nSeconds = ( nSeconds * 1000 ) + (long) (( currentTime.tv_usec - startTime.tv_usec) / 1000 ); -#endif -#endif - return nSeconds; + return ( nSeconds * 1000 ) + (long) (( currentTime.tv_usec - startTime.tv_usec) / 1000 ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/salinit.cxx b/sal/osl/w32/salinit.cxx index 3eb9290a87fd..e392f4ab3774 100644 --- a/sal/osl/w32/salinit.cxx +++ b/sal/osl/w32/salinit.cxx @@ -31,9 +31,6 @@ extern "C" { #endif -//From time.c -void sal_initGlobalTimer(); - // _set_invalid_parameter_handler appears unavailable with MinGW: #if defined _MSC_VER namespace { @@ -55,7 +52,6 @@ extern "C" void invalidParameterHandler( void sal_detail_initialize(int argc, char ** argv) { - sal_initGlobalTimer(); // SetProcessDEPPolicy(PROCESS_DEP_ENABLE); // SetDllDirectoryW(L""); // SetSearchPathMode( diff --git a/sal/osl/w32/time.c b/sal/osl/w32/time.c index fc8855b53680..49f33c297c43 100644 --- a/sal/osl/w32/time.c +++ b/sal/osl/w32/time.c @@ -184,17 +184,21 @@ sal_Bool SAL_CALL osl_getSystemTimeFromLocalTime( TimeValue* pLocalTimeVal, Time return sal_False; } + static struct _timeb startTime; -void sal_initGlobalTimer() -{ - _ftime( &startTime ); -} +static sal_Bool bGlobalTimer = sal_False; sal_uInt32 SAL_CALL osl_getGlobalTimer(void) { struct _timeb currentTime; sal_uInt32 nSeconds; + if ( bGlobalTimer == sal_False ) + { + _ftime( &startTime ); + bGlobalTimer=sal_True; + } + _ftime( ¤tTime ); nSeconds = (sal_uInt32)( currentTime.time - startTime.time ); |