>From 174dc618b8b9be46c6c12f247d7129dbfb1300f4 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Thu, 14 Jan 2016 14:24:09 +0100 Subject: [PATCH 3/6] Error out if waiting on socket readiness without a specified socket. Previously we just ignored such an attempt, but that seems to serve no purpose but making things harder to debug. Discussion: 20160114143931.GG10941@awork2.anarazel.de 20151230173734.hx7jj2fnwyljfqek@alap3.anarazel.de Reviewed-By: Robert Haas --- src/backend/port/unix_latch.c | 7 ++++--- src/backend/port/win32_latch.c | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/backend/port/unix_latch.c b/src/backend/port/unix_latch.c index 93fbc9e..b06798f 100644 --- a/src/backend/port/unix_latch.c +++ b/src/backend/port/unix_latch.c @@ -242,9 +242,10 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, int hifd; #endif - /* Ignore WL_SOCKET_* events if no valid socket is given */ - if (sock == PGINVALID_SOCKET) - wakeEvents &= ~(WL_SOCKET_READABLE | WL_SOCKET_WRITEABLE); + /* waiting for socket readiness without a socket indicates a bug */ + if (sock == PGINVALID_SOCKET && + (wakeEvents & (WL_SOCKET_READABLE | WL_SOCKET_WRITEABLE)) != 0) + elog(ERROR, "cannot wait on socket events without a socket"); Assert(wakeEvents != 0); /* must have at least one wake event */ diff --git a/src/backend/port/win32_latch.c b/src/backend/port/win32_latch.c index 80adc13..e101acf 100644 --- a/src/backend/port/win32_latch.c +++ b/src/backend/port/win32_latch.c @@ -119,8 +119,10 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, Assert(wakeEvents != 0); /* must have at least one wake event */ - if ((wakeEvents & WL_LATCH_SET) && latch->owner_pid != MyProcPid) - elog(ERROR, "cannot wait on a latch owned by another process"); + /* waiting for socket readiness without a socket indicates a bug */ + if (sock == PGINVALID_SOCKET && + (wakeEvents & (WL_SOCKET_READABLE | WL_SOCKET_WRITEABLE)) != 0) + elog(ERROR, "cannot wait on socket events without a socket"); /* * Initialize timeout if requested. We must record the current time so -- 2.7.0.229.g701fa7f