pgsql: Allow ConditionVariable[PrepareTo]Sleep to auto-switch betweenC
От | Tom Lane |
---|---|
Тема | pgsql: Allow ConditionVariable[PrepareTo]Sleep to auto-switch betweenC |
Дата | |
Msg-id | E1eYwvr-0004DX-PA@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Allow ConditionVariable[PrepareTo]Sleep to auto-switch between CVs. The original coding here insisted that callers manually cancel any prepared sleep for one condition variable before starting a sleep on another one. While that's not a huge burden today, it seems like a gotcha that will bite us in future if the use of condition variables increases; anything we can do to make the use of this API simpler and more robust is attractive. Hence, allow these functions to automatically switch their attention to a different CV when required. This is safe for the same reason it was OK for commit aced5a92b to let a broadcast operation cancel any prepared CV sleep: whenever we return to the other test-and-sleep loop, we will automatically re-prepare that CV, paying at most an extra test of that loop's exit condition. Back-patch to v10 where condition variables were introduced. Ordinarily we would probably not back-patch a change like this, but since it does not invalidate any coding pattern that was legal before, it seems safe enough. Furthermore, there's an open bug in replorigin_drop() for which the simplest fix requires this. Even if we chose to fix that in some more complicated way, the hazard would remain that we might back-patch some other bug fix that requires this behavior. Patch by me, reviewed by Thomas Munro. Discussion: https://postgr.es/m/2437.1515368316@sss.pgh.pa.us Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/13db3b936359eebf02a768db3a1959af880b6cc6 Modified Files -------------- src/backend/storage/lmgr/condition_variable.c | 26 ++++++++++++++------------ src/include/storage/condition_variable.h | 4 +--- 2 files changed, 15 insertions(+), 15 deletions(-)
В списке pgsql-committers по дате отправления: