summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2006-07-29 20:00:00 +0000
committerAndrew Dunstan <andrew@dunslane.net>2006-07-29 20:00:00 +0000
commite482136c04aa649b6f00f37ecf27b247c96fc006 (patch)
tree362339b05d5a257d8a6e1fd8304e34c4ef03c470
parent271852a0218e8e6ec9a0eb2a78145e0101d966be (diff)
downloadpostgresql-e482136c04aa649b6f00f37ecf27b247c96fc006.tar.gz
prevent multiplexing Windows kernel event objects we listen for across various sockets - should fix the occasional stats test regression failures we see.
-rw-r--r--src/backend/port/win32/socket.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/backend/port/win32/socket.c b/src/backend/port/win32/socket.c
index b4bd121ca9..2388430f99 100644
--- a/src/backend/port/win32/socket.c
+++ b/src/backend/port/win32/socket.c
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/port/win32/socket.c,v 1.10 2005/10/25 15:15:16 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/port/win32/socket.c,v 1.10.2.1 2006/07/29 20:00:00 adunstan Exp $
*
*-------------------------------------------------------------------------
*/
@@ -106,6 +106,7 @@ int
pgwin32_waitforsinglesocket(SOCKET s, int what)
{
static HANDLE waitevent = INVALID_HANDLE_VALUE;
+ static SOCKET current_socket = -1;
HANDLE events[2];
int r;
@@ -121,6 +122,15 @@ pgwin32_waitforsinglesocket(SOCKET s, int what)
ereport(ERROR,
(errmsg_internal("Failed to reset socket waiting event: %i", (int) GetLastError())));
+ /*
+ * make sure we don't multiplex this with a different socket
+ * from a previous call
+ */
+
+ if (current_socket != s && current_socket != -1)
+ WSAEventSelect(current_socket, waitevent, 0);
+
+ current_socket = s;
if (WSAEventSelect(s, waitevent, what) == SOCKET_ERROR)
{