Browse Source

Check for correct timeout error in cgsem_mswait

Con Kolivas 12 years ago
parent
commit
6e948d8750
2 changed files with 9 additions and 1 deletions
  1. 1 1
      util.c
  2. 8 0
      util.h

+ 1 - 1
util.c

@@ -2472,7 +2472,7 @@ int _cgsem_mswait(cgsem_t *cgsem, int ms, const char *file, const char *func, co
 	timeraddspec(&abs_timeout, &ts_now);
 	timeraddspec(&abs_timeout, &ts_now);
 	ret = sem_timedwait(cgsem, &abs_timeout);
 	ret = sem_timedwait(cgsem, &abs_timeout);
 
 
-	if (unlikely(ret && ret != ETIMEDOUT))
+	if (unlikely(ret && !sock_timeout()))
 		quitfrom(1, file, func, line, "Failed to sem_timedwait errno=%d cgsem=0x%p", errno, cgsem);
 		quitfrom(1, file, func, line, "Failed to sem_timedwait errno=%d cgsem=0x%p", errno, cgsem);
 	return ret;
 	return ret;
 }
 }

+ 8 - 0
util.h

@@ -20,6 +20,10 @@
 	{
 	{
 		return (errno == EAGAIN || errno == EWOULDBLOCK);
 		return (errno == EAGAIN || errno == EWOULDBLOCK);
 	}
 	}
+	static inline bool sock_timeout(void)
+	{
+		return (errno == ETIMEDOUT);
+	}
 #elif defined WIN32
 #elif defined WIN32
 	#include <ws2tcpip.h>
 	#include <ws2tcpip.h>
 	#include <winsock2.h>
 	#include <winsock2.h>
@@ -37,6 +41,10 @@
 	{
 	{
 		return (WSAGetLastError() == WSAEWOULDBLOCK);
 		return (WSAGetLastError() == WSAEWOULDBLOCK);
 	}
 	}
+	static inline bool sock_timeout(void)
+	{
+		return (WSAGetLastError() == WSAETIMEDOUT);
+	}
 	#ifndef SHUT_RDWR
 	#ifndef SHUT_RDWR
 	#define SHUT_RDWR SD_BOTH
 	#define SHUT_RDWR SD_BOTH
 	#endif
 	#endif