postgres.git / summary / log / commit / refs

commit    f1ca51549e9e7045a2db95a61744334f1dbb4d64
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Mon May 14 14:57:07 2012 +0000
First released in: 9.2.0

    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.


src/backend/postmaster/pgstat.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index cb437770830..4c2cc655723 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -3117,9 +3117,21 @@ PgstatCollectorMain(int argc, char *argv[]) /* * Try to receive and process a message. This will not block, * 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, sizeof(PgStat_Msg), 0); + +#ifdef WIN32 + pgwin32_noblock = 0; +#endif + if (len < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) [parent: f15c2eae9c2f]