summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2019-02-14 17:08:29 +0100
committerDaniel Stenberg <daniel@haxx.se>2019-02-15 23:23:14 +0100
commitca597ad34a4bf2f4f1c2352186d3e589040a0b54 (patch)
treee74c2093ac05a48ce63fe069c4633225e141bc4f /lib
parent208c77713aaab87d77a3b11f83308b7db61aaabc (diff)
downloadcurl-ca597ad34a4bf2f4f1c2352186d3e589040a0b54.tar.gz
Curl_now: figure out windows version in win32_init
... and avoid use of static variables that aren't thread safe. Fixes regression from e9ababd4f5a (present in the 7.64.0 release) Reported-by: Paul Groke Fixes #3572 Closes #3573
Diffstat (limited to 'lib')
-rw-r--r--lib/easy.c16
-rw-r--r--lib/timeval.c24
2 files changed, 24 insertions, 16 deletions
diff --git a/lib/easy.c b/lib/easy.c
index 6fcad3dec..d2d4166d5 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -75,6 +75,7 @@
#include "ssh.h"
#include "setopt.h"
#include "http_digest.h"
+#include "system_win32.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
@@ -95,6 +96,11 @@ static void win32_cleanup(void)
#endif
}
+#ifdef WIN32
+LARGE_INTEGER Curl_freq;
+bool Curl_isVistaOrGreater;
+#endif
+
/* win32_init() performs win32 socket initialization to properly setup the
stack to allow networking */
static CURLcode win32_init(void)
@@ -144,6 +150,16 @@ static CURLcode win32_init(void)
}
#endif
+#ifdef WIN32
+ if(Curl_verify_windows_version(6, 0, PLATFORM_WINNT,
+ VERSION_GREATER_THAN_EQUAL)) {
+ Curl_isVistaOrGreater = TRUE;
+ QueryPerformanceFrequency(&Curl_freq);
+ }
+ else
+ Curl_isVistaOrGreater = FALSE;
+#endif
+
return CURLE_OK;
}
diff --git a/lib/timeval.c b/lib/timeval.c
index 2569f175c..ff8d8a69a 100644
--- a/lib/timeval.c
+++ b/lib/timeval.c
@@ -21,30 +21,22 @@
***************************************************************************/
#include "timeval.h"
-#include "system_win32.h"
#if defined(WIN32) && !defined(MSDOS)
+/* set in win32_init() */
+extern LARGE_INTEGER Curl_freq;
+extern bool Curl_isVistaOrGreater;
+
struct curltime Curl_now(void)
{
struct curltime now;
- static LARGE_INTEGER freq;
- static int isVistaOrGreater = -1;
- if(isVistaOrGreater == -1) {
- if(Curl_verify_windows_version(6, 0, PLATFORM_WINNT,
- VERSION_GREATER_THAN_EQUAL)) {
- isVistaOrGreater = 1;
- QueryPerformanceFrequency(&freq);
- }
- else
- isVistaOrGreater = 0;
- }
- if(isVistaOrGreater == 1) { /* QPC timer might have issues pre-Vista */
+ if(Curl_isVistaOrGreater) { /* QPC timer might have issues pre-Vista */
LARGE_INTEGER count;
QueryPerformanceCounter(&count);
- now.tv_sec = (time_t)(count.QuadPart / freq.QuadPart);
- now.tv_usec =
- (int)((count.QuadPart % freq.QuadPart) * 1000000 / freq.QuadPart);
+ now.tv_sec = (time_t)(count.QuadPart / Curl_freq.QuadPart);
+ now.tv_usec = (int)((count.QuadPart % Curl_freq.QuadPart) * 1000000 /
+ Curl_freq.QuadPart);
}
else {
/* Disable /analyze warning that GetTickCount64 is preferred */