mirror of
https://github.com/postgres/postgres.git
synced 2025-09-08 00:47:37 +03:00
Clean up latch related code.
The larger part of this patch replaces usages of MyProc->procLatch with MyLatch. The latter works even early during backend startup, where MyProc->procLatch doesn't yet. While the affected code shouldn't run in cases where it's not initialized, it might get copied into places where it might. Using MyLatch is simpler and a bit faster to boot, so there's little point to stick with the previous coding. While doing so I noticed some weaknesses around newly introduced uses of latches that could lead to missed events, and an omitted CHECK_FOR_INTERRUPTS() call in worker_spi. As all the actual bugs are in v10 code, there doesn't seem to be sufficient reason to backpatch this. Author: Andres Freund Discussion: https://postgr.es/m/20170606195321.sjmenrfgl2nu6j63@alap3.anarazel.de https://postgr.es/m/20170606210405.sim3yl6vpudhmufo@alap3.anarazel.de Backpatch: -
This commit is contained in:
@@ -68,14 +68,14 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv)
|
||||
{
|
||||
cv_wait_event_set = CreateWaitEventSet(TopMemoryContext, 1);
|
||||
AddWaitEventToSet(cv_wait_event_set, WL_LATCH_SET, PGINVALID_SOCKET,
|
||||
&MyProc->procLatch, NULL);
|
||||
MyLatch, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset my latch before adding myself to the queue and before entering
|
||||
* the caller's predicate loop.
|
||||
*/
|
||||
ResetLatch(&MyProc->procLatch);
|
||||
ResetLatch(MyLatch);
|
||||
|
||||
/* Add myself to the wait queue. */
|
||||
SpinLockAcquire(&cv->mutex);
|
||||
@@ -135,7 +135,7 @@ ConditionVariableSleep(ConditionVariable *cv, uint32 wait_event_info)
|
||||
WaitEventSetWait(cv_wait_event_set, -1, &event, 1, wait_event_info);
|
||||
|
||||
/* Reset latch before testing whether we can return. */
|
||||
ResetLatch(&MyProc->procLatch);
|
||||
ResetLatch(MyLatch);
|
||||
|
||||
/*
|
||||
* If this process has been taken out of the wait list, then we know
|
||||
|
Reference in New Issue
Block a user