• Tom Lane's avatar
    Make WaitLatchOrSocket's timeout detection more robust. · 576a95b3
    Tom Lane authored
    In the previous coding, timeout would be noticed and reported only when
    poll() or socket() returned zero (or the equivalent behavior on Windows).
    Ordinarily that should work well enough, but it seems conceivable that we
    could get into a state where poll() always returns a nonzero value --- for
    example, if it is noticing a condition on one of the file descriptors that
    we do not think is reason to exit the loop.  If that happened, we'd be in a
    busy-wait loop that would fail to terminate even when the timeout expires.
    
    We can make this more robust at essentially no cost, by deciding to exit
    of our own accord if we compute a zero or negative time-remaining-to-wait.
    Previously the code noted this but just clamped the time-remaining to zero,
    expecting that we'd detect timeout on the next loop iteration.
    
    Back-patch to 9.2.  While 9.1 had a version of WaitLatchOrSocket, it was
    primitive compared to later versions, and did not guarantee reliable
    detection of timeouts anyway.  (Essentially, this is a refinement of
    commit 3e7fdcff, which was back-patched only as far as 9.2.)
    576a95b3
win32_latch.c 8.96 KB