From 03d418dcd339c8878186fcc8e165b62289d3d17c Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Tue, 5 Mar 2013 11:48:47 +0100 Subject: Tmp --- erts/emulator/sys/win32/sys_time.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'erts/emulator/sys/win32/sys_time.c') diff --git a/erts/emulator/sys/win32/sys_time.c b/erts/emulator/sys/win32/sys_time.c index 2f2dfc8197..8775b6a24d 100644 --- a/erts/emulator/sys/win32/sys_time.c +++ b/erts/emulator/sys/win32/sys_time.c @@ -63,6 +63,7 @@ static SysHrTime wrap = 0; static DWORD last_tick_count = 0; +static erts_smp_spinlock_t wrap_lock; /* Getting timezone information is a heavy operation, so we want to do this only once */ @@ -82,6 +83,7 @@ sys_init_time(void) static_tzi.DaylightDate.wMonth != 0) { have_static_tzi = 1; } + erts_smp_spinlock_init(&wrap_lock, "sys_gethrtime"); return 1; } @@ -367,11 +369,15 @@ SysHrTime sys_gethrtime(void) { DWORD ticks = (SysHrTime) (GetTickCount() & 0x7FFFFFFF); + SysHrTime res; + erts_smp_spin_lock(&wrap_lock); if (ticks < (SysHrTime) last_tick_count) { wrap += LL_LITERAL(1) << 31; } last_tick_count = ticks; - return ((((LONGLONG) ticks) + wrap) * LL_LITERAL(1000000)); + res = ((((LONGLONG) ticks) + wrap) * LL_LITERAL(1000000)); + erts_smp_spin_unlock(&wrap_lock); + return res } clock_t -- cgit v1.2.3