From: Thomas Munro Date: Wed, 25 Nov 2020 04:44:15 +0000 (+1300) Subject: Fix WaitLatch(NULL) on Windows. X-Git-Tag: REL_14_BETA1~1215 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a7e65dc88b6f088fc2fcf5a660d866de644b1300;p=thirdparty%2Fpostgresql.git Fix WaitLatch(NULL) on Windows. Further to commit 733fa9aa, on Windows when a latch is triggered but we aren't currently waiting for it, we need to locate the latch's HANDLE rather than calling ResetEvent(NULL). Author: Kyotaro Horiguchi Reported-by: Ranier Vilela Discussion: https://postgr.es/m/CAEudQArTPi1YBc%2Bn1fo0Asy3QBFhVjp_QgyKG-8yksVn%2ByRTiw%40mail.gmail.com --- diff --git a/src/backend/storage/ipc/latch.c b/src/backend/storage/ipc/latch.c index 24d44c982da..24afc47d513 100644 --- a/src/backend/storage/ipc/latch.c +++ b/src/backend/storage/ipc/latch.c @@ -1835,7 +1835,11 @@ WaitEventSetWaitBlock(WaitEventSet *set, int cur_timeout, if (cur_event->events == WL_LATCH_SET) { - if (!ResetEvent(set->latch->event)) + /* + * We cannot use set->latch->event to reset the fired event if we + * aren't waiting on this latch now. + */ + if (!ResetEvent(set->handles[cur_event->pos + 1])) elog(ERROR, "ResetEvent failed: error code %lu", GetLastError()); if (set->latch && set->latch->is_set)