Browse Source

Check for correct timeout error in cgsem_mswait

nfactor-troky
Con Kolivas 11 years ago
parent
commit
6e948d8750
  1. 2
      util.c
  2. 8
      util.h

2
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
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

Loading…
Cancel
Save