diff --git a/deps/hiredis/hiredis.c b/deps/hiredis/hiredis.c index 49dd807d0fe89ca807627ca124e4b308a207fb54..c7710a4d6a53c960a8d4985b254a7652692dd81d 100644 --- a/deps/hiredis/hiredis.c +++ b/deps/hiredis/hiredis.c @@ -1023,13 +1023,14 @@ static redisContext *redisContextInit(void) { } void redisFree(redisContext *c) { - if (c->fd > 0) + if (c->fd > 0) { #ifdef _WIN32 closesocket(c->fd); smRemoveSocket(c->fd); #else close(c->fd); #endif + } if (c->obuf != NULL) sdsfree(c->obuf); if (c->reader != NULL) diff --git a/deps/hiredis/net.c b/deps/hiredis/net.c index 81cdad98e82408d71df60e5f342dbe8d00201e2b..a49f6e0fb191db7eaa35c936521401cb0801d093 100644 --- a/deps/hiredis/net.c +++ b/deps/hiredis/net.c @@ -367,8 +367,13 @@ int redisContextPreConnectTcp(redisContext *c, const char *addr, int port, int blocking = (c->flags & REDIS_BLOCK); unsigned long inAddress; - if ((s = redisCreateSocket(c,AF_INET)) < 0) + if ((s = redisCreateSocket(c,AF_INET)) < 0) { return REDIS_ERR; + } + else { + smAddSocket(s); + } + sa->sin_family = AF_INET; sa->sin_port = htons(port); diff --git a/msvs/RedisBenchmark/RedisBenchmark.vcxproj b/msvs/RedisBenchmark/RedisBenchmark.vcxproj index 00e5e10c1d0eff80fc72029cd2f80f7dea8146a5..80340f97e4cac2d92fa6270b1f95b63114ff91ba 100644 --- a/msvs/RedisBenchmark/RedisBenchmark.vcxproj +++ b/msvs/RedisBenchmark/RedisBenchmark.vcxproj @@ -90,7 +90,7 @@ Disabled _WIN32IOCP;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\deps\hiredis; - MultiThreadedDebug + MultiThreadedDebugDLL 4996 @@ -108,7 +108,7 @@ Disabled _WIN32IOCP;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\deps\hiredis; - MultiThreadedDebug + MultiThreadedDebugDLL 4996 @@ -128,7 +128,7 @@ true _WIN32IOCP;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\deps\hiredis; - MultiThreaded + MultiThreadedDLL 4996 @@ -150,7 +150,7 @@ true _WIN32IOCP;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)..\deps\hiredis; - MultiThreaded + MultiThreadedDLL 4996 diff --git a/msvs/RedisCheckAof/RedisCheckAof.vcxproj b/msvs/RedisCheckAof/RedisCheckAof.vcxproj index be36aad8cb26b83e0b50877268edd130d42ae6e9..2fb5b2d1badd9b059a9f39958bd9e5874d162fff 100644 --- a/msvs/RedisCheckAof/RedisCheckAof.vcxproj +++ b/msvs/RedisCheckAof/RedisCheckAof.vcxproj @@ -83,7 +83,7 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 4996 - MultiThreadedDebug + MultiThreadedDebugDLL true @@ -97,7 +97,7 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 4996 - MultiThreadedDebug + MultiThreadedDebugDLL true @@ -113,7 +113,7 @@ true WIN32;_CONSOLE;%(PreprocessorDefinitions) 4996 - MultiThreaded + MultiThreadedDLL true @@ -131,7 +131,7 @@ true WIN32;_CONSOLE;%(PreprocessorDefinitions) 4996 - MultiThreaded + MultiThreadedDLL true diff --git a/msvs/RedisCheckDump/RedisCheckDump.vcxproj b/msvs/RedisCheckDump/RedisCheckDump.vcxproj index 65ff9e8b5cf49106c12e2d9b5ae3407ca5e5a66a..ad1dc46a460a2b51db17aed910bdecadfbc739b6 100644 --- a/msvs/RedisCheckDump/RedisCheckDump.vcxproj +++ b/msvs/RedisCheckDump/RedisCheckDump.vcxproj @@ -82,7 +82,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDebug + MultiThreadedDebugDLL 4996 @@ -96,7 +96,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDebug + MultiThreadedDebugDLL 4996 @@ -112,7 +112,7 @@ true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded + MultiThreadedDLL 4996 @@ -130,7 +130,7 @@ true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded + MultiThreadedDLL 4996 diff --git a/msvs/RedisCli/RedisCli.vcxproj b/msvs/RedisCli/RedisCli.vcxproj index bada5c0ef4d4f9272fe48831ccf4d9fde56e73ac..1b72cd241737b9dfe51b9d44f0b4978c7edfe540 100644 --- a/msvs/RedisCli/RedisCli.vcxproj +++ b/msvs/RedisCli/RedisCli.vcxproj @@ -83,7 +83,7 @@ Disabled $(SolutionDir)..\deps\hiredis;$(SolutionDir)..\deps\linenoise WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDebug + MultiThreadedDebugDLL 4996 @@ -99,7 +99,7 @@ Disabled $(SolutionDir)..\deps\hiredis;$(SolutionDir)..\deps\linenoise WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDebug + MultiThreadedDebugDLL 4996 @@ -117,7 +117,7 @@ true $(SolutionDir)..\deps\hiredis;$(SolutionDir)..\deps\linenoise WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded + MultiThreadedDLL 4996 @@ -137,7 +137,7 @@ true $(SolutionDir)..\deps\hiredis;$(SolutionDir)..\deps\linenoise WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded + MultiThreadedDLL 4996 diff --git a/msvs/RedisServer.vcxproj b/msvs/RedisServer.vcxproj index 8450400c7ab26d570b78df63b2db7a249c308579..f2032816d42dfa3d0489e8efff319a4aa29e4c6b 100644 --- a/msvs/RedisServer.vcxproj +++ b/msvs/RedisServer.vcxproj @@ -83,7 +83,7 @@ _WIN32IOCP;WIN32;_DEBUG;_CONSOLE;__x86_64__;%(PreprocessorDefinitions) $(SolutionDir)..\deps\lua\src;$(SolutionDir)..\deps\hiredis - MultiThreadedDebug + MultiThreadedDebugDLL Level3 ProgramDatabase Disabled @@ -101,7 +101,7 @@ _WIN32IOCP;WIN32;_DEBUG;_CONSOLE;__x86_64__;%(PreprocessorDefinitions) $(SolutionDir)..\deps\lua\src;$(SolutionDir)..\deps\hiredis - MultiThreadedDebug + MultiThreadedDebugDLL Level3 ProgramDatabase Disabled @@ -118,7 +118,7 @@ _WIN32IOCP;WIN32;NDEBUG;_CONSOLE;__x86_64__;%(PreprocessorDefinitions) $(SolutionDir)..\deps\lua\src;$(SolutionDir)..\deps\hiredis - MultiThreaded + MultiThreadedDLL Level3 ProgramDatabase 4996;4146 @@ -137,7 +137,7 @@ _WIN32IOCP;WIN32;NDEBUG;_CONSOLE;__x86_64__;%(PreprocessorDefinitions) $(SolutionDir)..\deps\lua\src;$(SolutionDir)..\deps\hiredis - MultiThreaded + MultiThreadedDLL Level3 ProgramDatabase 4996;4146 diff --git a/msvs/hiredis/hiredis.vcxproj b/msvs/hiredis/hiredis.vcxproj index 88e7973b58fc4c981c27410d8316a75eba5cad3a..cca27bb6278de4b287ed17d4248eafb72959ce57 100644 --- a/msvs/hiredis/hiredis.vcxproj +++ b/msvs/hiredis/hiredis.vcxproj @@ -84,7 +84,7 @@ Level3 Disabled WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - MultiThreadedDebug + MultiThreadedDebugDLL 4996 @@ -98,7 +98,7 @@ Level3 Disabled WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - MultiThreadedDebug + MultiThreadedDebugDLL 4996 @@ -114,7 +114,7 @@ true true WIN32;%(PreprocessorDefinitions) - MultiThreaded + MultiThreadedDLL 4996 @@ -132,7 +132,7 @@ true true WIN32;%(PreprocessorDefinitions) - MultiThreaded + MultiThreadedDLL 4996 diff --git a/msvs/lua/lua/lua.vcxproj b/msvs/lua/lua/lua.vcxproj index 558c5f6ae17a77fd362362be591a32442cf39630..8546d768de3c6c8208b5a0502caff8fa9f3575cd 100644 --- a/msvs/lua/lua/lua.vcxproj +++ b/msvs/lua/lua/lua.vcxproj @@ -91,7 +91,7 @@ Disabled WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) NotUsing - MultiThreadedDebug + MultiThreadedDebugDLL 4244;4018 @@ -106,7 +106,7 @@ Disabled WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) NotUsing - MultiThreadedDebug + MultiThreadedDebugDLL 4244;4018 @@ -120,7 +120,7 @@ Level3 WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) NotUsing - MultiThreaded + MultiThreadedDLL 4244;4018 @@ -134,7 +134,7 @@ Level3 WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) NotUsing - MultiThreaded + MultiThreadedDLL 4244;4018 diff --git a/src/ae_wsiocp.c b/src/ae_wsiocp.c index 6fde0eb8f37f004aec67884f19b9991746ae468e..4749fef9c374dc3394ce85b8e0e266b7275a2f2d 100644 --- a/src/ae_wsiocp.c +++ b/src/ae_wsiocp.c @@ -53,8 +53,7 @@ sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx; * socket value is not an index. Convert socket to index * and then find matching structure in list */ -/* prefer prime number for number of indexes */ -#define MAX_SOCKET_LOOKUP 1021 +#define MAX_SOCKET_LOOKUP 65535 /* structure that keeps state of sockets and Completion port handle */ typedef struct aeApiState { @@ -65,10 +64,9 @@ typedef struct aeApiState { list closing; } aeApiState; -/* convert socket value to an index - * Use simple modulo. We can add hash if needed */ +/* uses virtual FD as an index */ int aeSocketIndex(int fd) { - return fd % MAX_SOCKET_LOOKUP; + return smLookupFD( fd ); } /* get data for socket / fd being monitored. Create if not found*/ diff --git a/src/rdb.c b/src/rdb.c index afbb80135b66e5792f5c95a8aee8c8e9cb3ec3f9..da6894b7ecac9901925d93666ab8626c21ead112 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -39,6 +39,8 @@ #include #include #include +#else +#include #endif #include @@ -414,6 +416,11 @@ int rdbSaveDoubleValue(rio *rdb, double val) { int rdbLoadDoubleValue(rio *rdb, double *val) { char buf[128]; unsigned char len; +#ifdef _WIN32 + double scannedVal = 0; + int assigned = 0; + memset(buf, 128, 0); +#endif if (rioRead(rdb,&len,1) == 0) return -1; switch(len) { @@ -423,8 +430,18 @@ int rdbLoadDoubleValue(rio *rdb, double *val) { default: if (rioRead(rdb,buf,len) == 0) return -1; buf[len] = '\0'; +#ifdef _WIN32 + assigned = sscanf_s(buf, "%lg", &scannedVal); + if( assigned != 0 ) { + (*val) = scannedVal; + return 0; + } else { + return -1; + } +#else sscanf(buf, "%lg", val); return 0; +#endif } } @@ -1338,13 +1355,15 @@ void stopLoading(void) { } int rdbLoad(char *filename) { - uint32_t dbid; - int type, rdbver; + uint32_t dbid = 0; + int type = 0; + int rdbver = 0; redisDb *db = server.db+0; char buf[1024]; - long long expiretime, now = mstime(); + long long expiretime; + long now = mstime(); long loops = 0; - FILE *fp; + FILE *fp = NULL; rio rdb; #ifdef _WIN32 diff --git a/src/sentinel.c b/src/sentinel.c index e854392168b83ffbebf5887c5e6f458990c3cb7e..12dc879073f7a2bc81715ffccca285bf42370cef 100644 --- a/src/sentinel.c +++ b/src/sentinel.c @@ -39,7 +39,9 @@ #include #endif +#ifndef _WIN32 extern char **environ; +#endif #define REDIS_SENTINEL_PORT 26379 @@ -671,7 +673,11 @@ void sentinelRunPendingScripts(void) { sj->pid = 0; } else if (pid == 0) { /* Child */ +#ifdef _WIN32 + _execv(sj->argv[0],sj->argv); +#else execve(sj->argv[0],sj->argv,environ); +#endif /* If we are here an error occurred. */ _exit(2); /* Don't retry execution. */ } else { diff --git a/src/win32_wsiocp.c b/src/win32_wsiocp.c index 4f7468d72e3166be1887b5e7c73fad874ce82f5c..4cf466df028d0cd354e40f3af7c54d726c843621 100644 --- a/src/win32_wsiocp.c +++ b/src/win32_wsiocp.c @@ -442,6 +442,7 @@ void aeShutdown(int fd) { /* when closing socket, need to unassociate completion port */ int aeWinCloseSocket(int fd) { aeSockState *sockstate; + BOOL closed = FALSE; if ((sockstate = aeGetSockState(iocpState, fd)) == NULL) { closesocket((SOCKET)fd); @@ -455,12 +456,14 @@ int aeWinCloseSocket(int fd) { if (sockstate->wreqs == 0 && (sockstate->masks & (READ_QUEUED | CONNECT_PENDING | SOCKET_ATTACHED)) == 0) { closesocket((SOCKET)fd); - smRemoveSocket(fd); + closed = TRUE; } else { sockstate->masks |= CLOSE_PENDING; } aeDelSockState(iocpState, sockstate); + if (closed == TRUE) smRemoveSocket(fd); + return 0; }