From 497d39d76815a54917c4907c73451ecb715b1fe2 Mon Sep 17 00:00:00 2001
From: Andrew Dunstan <andrew@dunslane.net>
Date: Sat, 29 Jul 2006 19:55:18 +0000
Subject: [PATCH] prevent multiplexing Windows kernel event objects we listen
 for across various sockets - should fix the occasional stats test regression
 failures we see.

---
 src/backend/port/win32/socket.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/backend/port/win32/socket.c b/src/backend/port/win32/socket.c
index e2ea407336e..1b69e32d8e2 100644
--- a/src/backend/port/win32/socket.c
+++ b/src/backend/port/win32/socket.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/port/win32/socket.c,v 1.11 2006/03/05 15:58:35 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/port/win32/socket.c,v 1.12 2006/07/29 19:55:18 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 kernel event object 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)
 	{
-- 
GitLab