• Tom Lane's avatar
    Attempt to fix some issues in our Windows socket code. · b85427f2
    Tom Lane authored
    Make sure WaitLatchOrSocket regards FD_CLOSE as a read-ready condition.
    We might want to tweak this further, but it was surely wrong as-is.
    
    Make pgwin32_waitforsinglesocket detach its private event object from the
    passed socket before returning.  I suspect that failure to do so leads
    to race conditions when other code (such as WaitLatchOrSocket) attaches
    a different event object to the same socket.  Moreover, the existing
    coding meant that repeated calls to pgwin32_waitforsinglesocket would
    perform ResetEvent on an event actively connected to a socket, which
    is rumored to be an unsafe practice; the WSAEventSelect documentation
    appears to recommend against this, though it does not say not to do it
    in so many words.
    
    Also, uniformly use the coding pattern "WSAEventSelect(s, NULL, 0)" to
    detach events from sockets, rather than passing the event in the second
    parameter.  The WSAEventSelect documentation says that the second parameter
    is ignored if the third is 0, so theoretically this should make no
    difference.  However, elsewhere on the same reference page the use of NULL
    in this context is recommended, and I have found suggestions on the net
    that some versions of Windows have bugs with a non-NULL second parameter
    in this usage.
    
    Some other mostly-cosmetic cleanup, such as using the right one of
    WSAGetLastError and GetLastError for reporting errors from these functions.
    b85427f2
win32_latch.c 7.2 KB