aboutsummaryrefslogtreecommitdiff
path: root/src/backend/port/win32_latch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/port/win32_latch.c')
-rw-r--r--src/backend/port/win32_latch.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/backend/port/win32_latch.c b/src/backend/port/win32_latch.c
index 622798924dc..62800ad66f2 100644
--- a/src/backend/port/win32_latch.c
+++ b/src/backend/port/win32_latch.c
@@ -130,10 +130,11 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
numevents = 2;
if (wakeEvents & (WL_SOCKET_READABLE | WL_SOCKET_WRITEABLE))
{
+ /* Need an event object to represent events on the socket */
int flags = 0;
if (wakeEvents & WL_SOCKET_READABLE)
- flags |= FD_READ;
+ flags |= (FD_READ | FD_CLOSE);
if (wakeEvents & WL_SOCKET_WRITEABLE)
flags |= FD_WRITE;
@@ -201,11 +202,11 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
WSANETWORKEVENTS resEvents;
ZeroMemory(&resEvents, sizeof(resEvents));
- if (WSAEnumNetworkEvents(sock, sockevent, &resEvents) == SOCKET_ERROR)
- elog(ERROR, "failed to enumerate network events: error code %lu",
- GetLastError());
+ if (WSAEnumNetworkEvents(sock, sockevent, &resEvents) != 0)
+ elog(ERROR, "failed to enumerate network events: error code %u",
+ WSAGetLastError());
if ((wakeEvents & WL_SOCKET_READABLE) &&
- (resEvents.lNetworkEvents & FD_READ))
+ (resEvents.lNetworkEvents & (FD_READ | FD_CLOSE)))
{
result |= WL_SOCKET_READABLE;
}
@@ -233,10 +234,10 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
}
while (result == 0);
- /* Clean up the handle we created for the socket */
+ /* Clean up the event object we created for the socket */
if (sockevent != WSA_INVALID_EVENT)
{
- WSAEventSelect(sock, sockevent, 0);
+ WSAEventSelect(sock, NULL, 0);
WSACloseEvent(sockevent);
}