Skip to content

Commit 81b3c27

Browse files
author
Ajo Robert
committed
Bug#21770366 backport bug#21657078 to 5.5 and 5.6
Problem Statement ========= Fix various issues when building MySQL with Visual Studio 2015. Fix: ======= - Visual Studio 2015 adds support for timespec. Add check for this and only use our replacement if timespec is not defined. - Rename lfind/lsearch to my* to avoid redefinition problems. - Set default value for TMPDIR to "" on Windows as P_tmpdir no longer exists. - using VS definition of snprintf if available - tzname are now renamed to _tzname. - This patch raises the minimum version required of WiX Toolkit to 3.8, which is required to make MSI packages with Visual Studio 2015
2 parents 836ca91 + 3d1306f commit 81b3c27

File tree

11 files changed

+81
-48
lines changed

11 files changed

+81
-48
lines changed

CMakeLists.txt

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
22
#
33
# This program is free software; you can redistribute it and/or modify
44
# it under the terms of the GNU General Public License as published by
@@ -388,9 +388,16 @@ IF(SYSCONFDIR)
388388
SET(DEFAULT_SYSCONFDIR "${SYSCONFDIR}")
389389
ENDIF()
390390

391-
SET(TMPDIR "P_tmpdir"
392-
CACHE PATH
393-
"PATH to MySQL TMP dir. Defaults to the P_tmpdir macro in <stdio.h>")
391+
IF(WIN32) # P_tmpdir is not defined on Windows as of VS2015.
392+
SET(TMPDIR "" # So we use empty path as default. In practice TMP/TEMP is used
393+
CACHE PATH
394+
"PATH to MySQL TMP dir")
395+
ELSE()
396+
SET(TMPDIR "P_tmpdir"
397+
CACHE PATH
398+
"PATH to MySQL TMP dir. Defaults to the P_tmpdir macro in <stdio.h>")
399+
ENDIF()
400+
394401
IF(TMPDIR STREQUAL "P_tmpdir")
395402
# Do not quote it, to refer to the P_tmpdir macro.
396403
SET(DEFAULT_TMPDIR "P_tmpdir")

cmake/os/Windows.cmake

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
22
#
33
# This program is free software; you can redistribute it and/or modify
44
# it under the terms of the GNU General Public License as published by
@@ -186,12 +186,13 @@ CHECK_SYMBOL_REPLACEMENT(SIGQUIT SIGTERM signal.h)
186186
CHECK_SYMBOL_REPLACEMENT(SIGPIPE SIGINT signal.h)
187187
CHECK_SYMBOL_REPLACEMENT(isnan _isnan float.h)
188188
CHECK_SYMBOL_REPLACEMENT(finite _finite float.h)
189+
CHECK_SYMBOL_REPLACEMENT(tzname _tzname time.h)
190+
CHECK_SYMBOL_REPLACEMENT(snprintf _snprintf stdio.h)
189191
CHECK_FUNCTION_REPLACEMENT(popen _popen)
190192
CHECK_FUNCTION_REPLACEMENT(pclose _pclose)
191193
CHECK_FUNCTION_REPLACEMENT(access _access)
192194
CHECK_FUNCTION_REPLACEMENT(strcasecmp _stricmp)
193195
CHECK_FUNCTION_REPLACEMENT(strncasecmp _strnicmp)
194-
CHECK_FUNCTION_REPLACEMENT(snprintf _snprintf)
195196
CHECK_FUNCTION_REPLACEMENT(strtok_r strtok_s)
196197
CHECK_FUNCTION_REPLACEMENT(strtoll _strtoi64)
197198
CHECK_FUNCTION_REPLACEMENT(strtoull _strtoui64)

cmake/os/WindowsCache.cmake

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
22
#
33
# This program is free software; you can redistribute it and/or modify
44
# it under the terms of the GNU General Public License as published by
@@ -231,7 +231,6 @@ SET(HAVE_SIZEOF_ULONG FALSE CACHE INTERNAL "")
231231
SET(HAVE_SIZEOF_U_INT32_T FALSE CACHE INTERNAL "")
232232
SET(HAVE_SIZE_OF_SSIZE_T FALSE CACHE INTERNAL "")
233233
SET(HAVE_SLEEP CACHE INTERNAL "")
234-
SET(HAVE_SNPRINTF CACHE INTERNAL "")
235234
SET(HAVE_SOCKADDR_IN_SIN_LEN CACHE INTERNAL "")
236235
SET(HAVE_SOCKADDR_IN6_SIN6_LEN CACHE INTERNAL "")
237236
SET(HAVE_SOCKADDR_STORAGE_SS_FAMILY 1 CACHE INTERNAL "")
@@ -306,7 +305,6 @@ SET(HAVE_TIME 1 CACHE INTERNAL "")
306305
SET(HAVE_TIMES CACHE INTERNAL "")
307306
SET(HAVE_TIMESPEC_TS_SEC CACHE INTERNAL "")
308307
SET(HAVE_TIME_H 1 CACHE INTERNAL "")
309-
SET(HAVE_TZNAME 1 CACHE INTERNAL "")
310308
SET(HAVE_UNISTD_H CACHE INTERNAL "")
311309
SET(HAVE_UTIME_H CACHE INTERNAL "")
312310
SET(HAVE_VALLOC CACHE INTERNAL "")
@@ -333,6 +331,7 @@ SET(HAVE__strtoui64 1 CACHE INTERNAL "")
333331
IF(MSVC_VERSION GREATER 1310)
334332
SET(HAVE_strtok_s 1 CACHE INTERNAL "")
335333
ENDIF()
334+
SET(HAVE__tzname 1 CACHE INTERNAL "")
336335
SET(STDC_HEADERS CACHE 1 INTERNAL "")
337336
SET(STRUCT_DIRENT_HAS_D_INO CACHE INTERNAL "")
338337
SET(STRUCT_DIRENT_HAS_D_INO CACHE INTERNAL "")

config.h.cmake

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
1+
/* Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
22

33
This program is free software; you can redistribute it and/or modify
44
it under the terms of the GNU General Public License as published by
@@ -395,6 +395,7 @@
395395
#cmakedefine HAVE_UINT64 1
396396
#cmakedefine SIZEOF_BOOL @SIZEOF_BOOL@
397397
#cmakedefine HAVE_BOOL 1
398+
#cmakedefine HAVE_STRUCT_TIMESPEC
398399

399400
#cmakedefine SOCKET_SIZE_TYPE @SOCKET_SIZE_TYPE@
400401

@@ -517,6 +518,7 @@
517518
#cmakedefine strtok_r @strtok_r@
518519
#cmakedefine strtoll @strtoll@
519520
#cmakedefine strtoull @strtoull@
521+
#cmakedefine tzname @tzname@
520522
#cmakedefine vsnprintf @vsnprintf@
521523
#if (_MSC_VER > 1310)
522524
# define HAVE_SETENV

configure.cmake

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
22
#
33
# This program is free software; you can redistribute it and/or modify
44
# it under the terms of the GNU General Public License as published by
@@ -741,7 +741,7 @@ MY_CHECK_TYPE_SIZE(char CHAR)
741741
MY_CHECK_TYPE_SIZE(short SHORT)
742742
MY_CHECK_TYPE_SIZE(int INT)
743743
MY_CHECK_TYPE_SIZE("long long" LONG_LONG)
744-
SET(CMAKE_EXTRA_INCLUDE_FILES stdio.h sys/types.h)
744+
SET(CMAKE_EXTRA_INCLUDE_FILES stdio.h sys/types.h time.h)
745745
MY_CHECK_TYPE_SIZE(off_t OFF_T)
746746
MY_CHECK_TYPE_SIZE(uchar UCHAR)
747747
MY_CHECK_TYPE_SIZE(uint UINT)
@@ -756,6 +756,7 @@ MY_CHECK_TYPE_SIZE(u_int32_t U_INT32_T)
756756
MY_CHECK_TYPE_SIZE(int64 INT64)
757757
MY_CHECK_TYPE_SIZE(uint64 UINT64)
758758
MY_CHECK_TYPE_SIZE(time_t TIME_T)
759+
MY_CHECK_TYPE_SIZE("struct timespec" STRUCT_TIMESPEC)
759760
SET (CMAKE_EXTRA_INCLUDE_FILES sys/types.h)
760761
MY_CHECK_TYPE_SIZE(bool BOOL)
761762
SET(CMAKE_EXTRA_INCLUDE_FILES)

include/my_pthread.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
1+
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
22
33
This program is free software; you can redistribute it and/or modify
44
it under the terms of the GNU General Public License as published by
@@ -90,6 +90,7 @@ typedef volatile LONG my_pthread_once_t;
9090
windows implementation of pthread_cond_timedwait
9191
*/
9292

93+
#ifndef HAVE_STRUCT_TIMESPEC
9394
/*
9495
Declare a union to make sure FILETIME is properly aligned
9596
so it can be used directly as a 64 bit value. The value
@@ -131,6 +132,8 @@ struct timespec {
131132
#define diff_timespec(TS1, TS2) \
132133
((TS1.tv.i64 - TS2.tv.i64) * 100)
133134

135+
#endif
136+
134137
int win_pthread_mutex_trylock(pthread_mutex_t *mutex);
135138
int pthread_create(pthread_t *, const pthread_attr_t *, pthread_handler, void *);
136139
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);

mysys/lf_hash.c

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
1+
/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
22
33
This program is free software; you can redistribute it and/or modify
44
it under the terms of the GNU General Public License as published by
@@ -45,7 +45,7 @@ const int LF_HASH_OVERHEAD= sizeof(LF_SLIST);
4545

4646
/*
4747
a structure to pass the context (pointers two the three successive elements
48-
in a list) from lfind to linsert/ldelete
48+
in a list) from my_lfind to linsert/ldelete
4949
*/
5050
typedef struct {
5151
intptr volatile *prev;
@@ -72,7 +72,7 @@ typedef struct {
7272
cursor is positioned in either case
7373
pins[0..2] are used, they are NOT removed on return
7474
*/
75-
static int lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
75+
static int my_lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
7676
const uchar *key, uint keylen, CURSOR *cursor, LF_PINS *pins)
7777
{
7878
uint32 cur_hashnr;
@@ -140,7 +140,7 @@ static int lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
140140
/*
141141
DESCRIPTION
142142
insert a 'node' in the list that starts from 'head' in the correct
143-
position (as found by lfind)
143+
position (as found by my_lfind)
144144
145145
RETURN
146146
0 - inserted
@@ -158,7 +158,7 @@ static LF_SLIST *linsert(LF_SLIST * volatile *head, CHARSET_INFO *cs,
158158

159159
for (;;)
160160
{
161-
if (lfind(head, cs, node->hashnr, node->key, node->keylen,
161+
if (my_lfind(head, cs, node->hashnr, node->key, node->keylen,
162162
&cursor, pins) &&
163163
(flags & LF_HASH_UNIQUE))
164164
{
@@ -209,7 +209,7 @@ static int ldelete(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
209209

210210
for (;;)
211211
{
212-
if (!lfind(head, cs, hashnr, key, keylen, &cursor, pins))
212+
if (!my_lfind(head, cs, hashnr, key, keylen, &cursor, pins))
213213
{
214214
res= 1; /* not found */
215215
break;
@@ -233,7 +233,7 @@ static int ldelete(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
233233
(to ensure the number of "set DELETED flag" actions
234234
is equal to the number of "remove from the list" actions)
235235
*/
236-
lfind(head, cs, hashnr, key, keylen, &cursor, pins);
236+
my_lfind(head, cs, hashnr, key, keylen, &cursor, pins);
237237
}
238238
res= 0;
239239
break;
@@ -259,12 +259,12 @@ static int ldelete(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
259259
it uses pins[0..2], on return the pin[2] keeps the node found
260260
all other pins are removed.
261261
*/
262-
static LF_SLIST *lsearch(LF_SLIST * volatile *head, CHARSET_INFO *cs,
262+
static LF_SLIST *my_lsearch(LF_SLIST * volatile *head, CHARSET_INFO *cs,
263263
uint32 hashnr, const uchar *key, uint keylen,
264264
LF_PINS *pins)
265265
{
266266
CURSOR cursor;
267-
int res= lfind(head, cs, hashnr, key, keylen, &cursor, pins);
267+
int res= my_lfind(head, cs, hashnr, key, keylen, &cursor, pins);
268268
if (res)
269269
_lf_pin(pins, 2, cursor.curr);
270270
_lf_unpin(pins, 0);
@@ -445,7 +445,7 @@ int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen)
445445
MY_ERRPTR if OOM
446446
447447
NOTE
448-
see lsearch() for pin usage notes
448+
see my_lsearch() for pin usage notes
449449
*/
450450
void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen)
451451
{
@@ -459,7 +459,7 @@ void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen)
459459
return MY_ERRPTR;
460460
if (*el == NULL && unlikely(initialize_bucket(hash, el, bucket, pins)))
461461
return MY_ERRPTR;
462-
found= lsearch(el, hash->charset, my_reverse_bits(hashnr) | 1,
462+
found= my_lsearch(el, hash->charset, my_reverse_bits(hashnr) | 1,
463463
(uchar *)key, keylen, pins);
464464
lf_rwunlock_by_pins(pins);
465465
return found ? found+1 : 0;

mysys/my_wincond.c

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
1+
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
22
33
This program is free software; you can redistribute it and/or modify
44
it under the terms of the GNU General Public License as published by
@@ -88,6 +88,7 @@ static void check_native_cond_availability(void)
8888

8989
static DWORD get_milliseconds(const struct timespec *abstime)
9090
{
91+
#ifndef HAVE_STRUCT_TIMESPEC
9192
long long millis;
9293
union ft64 now;
9394

@@ -118,6 +119,17 @@ static DWORD get_milliseconds(const struct timespec *abstime)
118119
millis= UINT_MAX;
119120

120121
return (DWORD)millis;
122+
#else
123+
/*
124+
Convert timespec to millis and subtract current time.
125+
my_getsystime() returns time in 100 ns units.
126+
*/
127+
if (abstime == NULL)
128+
return INFINITE;
129+
130+
return (DWORD)(abstime->tv_sec * 1000 + abstime->tv_nsec / 1000000 -
131+
my_getsystime() / 10000);
132+
#endif
121133
}
122134

123135

packaging/WiX/CMakeLists.txt

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
22
#
33
# This program is free software; you can redistribute it and/or modify
44
# it under the terms of the GNU General Public License as published by
@@ -23,8 +23,15 @@ FIND_PATH(WIX_DIR heat.exe
2323
"$ENV{ProgramFiles}/Windows Installer XML v3/bin"
2424
"$ENV{ProgramFiles}/Windows Installer XML v3.5/bin"
2525
"$ENV{ProgramFiles}/WiX Toolset V3.6/bin"
26+
"$ENV{ProgramFiles}/WiX Toolset V3.8/bin"
2627
)
2728

29+
IF(NOT WIX_DIR)
30+
FIND_PATH(WIX_DIR heat.exe
31+
"$ENV{ProgramFiles}/WiX Toolset V3.10/bin"
32+
)
33+
ENDIF()
34+
2835
IF(NOT WIX_DIR)
2936
IF(NOT _WIX_DIR_CHECKED)
3037
SET(_WIX_DIR_CHECKED 1 CACHE INTERNAL "")
@@ -101,6 +108,7 @@ IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
101108
SET(WixWin64 " Win64='yes'")
102109
ELSE()
103110
SET(WixWin64)
111+
SET(WixWin64 " Win64='no'")
104112
ENDIF()
105113

106114
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_server_extra.wxs.in

packaging/WiX/ca/CMakeLists.txt

+19-19
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
22
#
33
# This program is free software; you can redistribute it and/or modify
44
# it under the terms of the GNU General Public License as published by
@@ -13,38 +13,38 @@
1313
# along with this program; if not, write to the Free Software
1414
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1515

16-
INCLUDE_DIRECTORIES(${WIX_DIR}/../SDK/inc ${WIX_DIR}/SDK/inc)
17-
LINK_DIRECTORIES(${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib)
18-
19-
SET(WIXCA_SOURCES CustomAction.cpp CustomAction.def)
20-
2116
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
22-
SET(WIX_ARCH_SUFFIX "_x64")
17+
SET(WIX_ARCH "x64")
2318
ELSE()
24-
SET(WIX_ARCH_SUFFIX)
19+
SET(WIX_ARCH "x86")
2520
ENDIF()
2621

27-
IF(MSVC_VERSION EQUAL 1400)
28-
SET(WIX35_MSVC_SUFFIX "_2005")
29-
ELSEIF(MSVC_VERSION EQUAL 1500)
30-
SET(WIX35_MSVC_SUFFIX "_2008")
22+
IF(MSVC_VERSION EQUAL 1900)
23+
SET(WIX_MSVC_DIR "VS2015")
24+
ELSEIF(MSVC_VERSION EQUAL 1800)
25+
SET(WIX_MSVC_DIR "VS2013")
3126
ELSEIF(MSVC_VERSION EQUAL 1600)
32-
SET(WIX35_MSVC_SUFFIX "_2010")
27+
SET(WIX_MSVC_DIR "VS2010")
3328
ELSE()
3429
# When next VS is out, add the correct version here
3530
MESSAGE(FATAL_ERROR "Unknown VS version")
3631
ENDIF()
3732

38-
MESSAGE(STATUS "Searching for wcautil${WIX_ARCH_SUFFIX} or wcautil${WIX35_MSVC_SUFFIX}${WIX_ARCH_SUFFIX} in ${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib")
39-
MESSAGE(STATUS "Searching for dutil${WIX_ARCH_SUFFIX} or dutil${WIX35_MSVC_SUFFIX}${WIX_ARCH_SUFFIX} in ${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib")
33+
INCLUDE_DIRECTORIES(${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/inc)
34+
LINK_DIRECTORIES(${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH})
35+
36+
SET(WIXCA_SOURCES CustomAction.cpp CustomAction.def)
37+
38+
MESSAGE(STATUS "Searching for wcautil in ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}")
39+
MESSAGE(STATUS "Searching for dutil in ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}")
4040

4141
FIND_LIBRARY(WIX_WCAUTIL_LIBRARY
42-
NAMES wcautil${WIX_ARCH_SUFFIX} wcautil${WIX35_MSVC_SUFFIX}${WIX_ARCH_SUFFIX}
43-
HINTS ${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib)
42+
NAMES wcautil
43+
PATHS ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH})
4444

4545
FIND_LIBRARY(WIX_DUTIL_LIBRARY
46-
NAMES dutil${WIX_ARCH_SUFFIX} dutil${WIX35_MSVC_SUFFIX}${WIX_ARCH_SUFFIX}
47-
PATHS ${WIX_DIR}/../SDK/lib ${WIX_DIR}/SDK/lib)
46+
NAMES dutil
47+
PATHS ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH})
4848

4949
MESSAGE(STATUS "Found: ${WIX_WCAUTIL_LIBRARY}")
5050
MESSAGE(STATUS "Found: ${WIX_DUTIL_LIBRARY}")

plugin/semisync/semisync_master.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* Copyright (C) 2007 Google Inc.
2-
Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
2+
Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
33
44
This program is free software; you can redistribute it and/or modify
55
it under the terms of the GNU General Public License as published by
@@ -51,7 +51,7 @@ static int getWaitTime(const struct timespec& start_ts);
5151

5252
static unsigned long long timespec_to_usec(const struct timespec *ts)
5353
{
54-
#ifndef __WIN__
54+
#ifdef HAVE_STRUCT_TIMESPEC
5555
return (unsigned long long) ts->tv_sec * TIME_MILLION + ts->tv_nsec / TIME_THOUSAND;
5656
#else
5757
return ts->tv.i64 / 10;
@@ -702,7 +702,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
702702
}
703703

704704
/* Calcuate the waiting period. */
705-
#ifdef __WIN__
705+
#ifndef HAVE_STRUCT_TIMESPEC
706706
abstime.tv.i64 = start_ts.tv.i64 + (__int64)wait_timeout_ * TIME_THOUSAND * 10;
707707
abstime.max_timeout_msec= (long)wait_timeout_;
708708
#else

0 commit comments

Comments
 (0)