Skip to content
Snippets Groups Projects
Commit f1ca5154 authored by Tom Lane's avatar Tom Lane
Browse files

Force pgwin32_recv into nonblock mode when called from pgstat.c.

This should get rid of the usage of pgwin32_waitforsinglesocket entirely,
and perhaps thereby remove the race condition that's evidently still
present on some versions of Windows.  The previous arrangement was a bit
unsafe anyway, since waiting at the recv() would not allow pgstat to notice
postmaster death.
parent f15c2eae
No related branches found
No related tags found
No related merge requests found
...@@ -3117,9 +3117,21 @@ PgstatCollectorMain(int argc, char *argv[]) ...@@ -3117,9 +3117,21 @@ PgstatCollectorMain(int argc, char *argv[])
/* /*
* Try to receive and process a message. This will not block, * Try to receive and process a message. This will not block,
* since the socket is set to non-blocking mode. * since the socket is set to non-blocking mode.
*
* XXX On Windows, we have to force pgwin32_recv to cooperate.
* This is extremely broken and should be fixed someday.
*/ */
#ifdef WIN32
pgwin32_noblock = 1;
#endif
len = recv(pgStatSock, (char *) &msg, len = recv(pgStatSock, (char *) &msg,
sizeof(PgStat_Msg), 0); sizeof(PgStat_Msg), 0);
#ifdef WIN32
pgwin32_noblock = 0;
#endif
if (len < 0) if (len < 0)
{ {
if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment