Curl_now: figure out windows version in win32_init
... and avoid use of static variables that aren't thread safe.
Fixes regression from e9ababd4f5
(present in the 7.64.0 release)
Reported-by: Paul Groke
Fixes #3572
Closes #3573
This commit is contained in:
Родитель
208c77713a
Коммит
ca597ad34a
16
lib/easy.c
16
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
Загрузка…
Ссылка в новой задаче