aboutsummaryrefslogtreecommitdiff
path: root/contrib/postgres_fdw/postgres_fdw.c
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2023-08-15 10:20:11 +1200
committerThomas Munro <tmunro@postgresql.org>2023-08-15 10:23:47 +1200
commit5ffb7c775062ef18756e515ac96f06d012cbb950 (patch)
tree5c6374b37137341e740d1d0e3e36e2f995007f63 /contrib/postgres_fdw/postgres_fdw.c
parent82a4edabd272f70d044faec8cf7fd1eab92d9991 (diff)
downloadpostgresql-5ffb7c775062ef18756e515ac96f06d012cbb950.tar.gz
postgresql-5ffb7c775062ef18756e515ac96f06d012cbb950.zip
De-pessimize ConditionVariableCancelSleep().
Commit b91dd9de was concerned with a theoretical problem with our non-atomic condition variable operations. If you stop sleeping, and then cancel the sleep in a separate step, you might be signaled in between, and that could be lost. That doesn't matter for callers of ConditionVariableBroadcast(), but callers of ConditionVariableSignal() might be upset if a signal went missing like this. Commit bc971f4025c interacted badly with that logic, because it doesn't use ConditionVariableSleep(), which would normally put us back in the wait list. ConditionVariableCancelSleep() would be confused and think we'd received an extra signal, and try to forward it to another backend, resulting in wakeup storms. New idea: ConditionVariableCancelSleep() can just return true if we've been signaled. Hypothetical users of ConditionVariableSignal() would then still have a way to deal with rare lost signals if they are concerned about that problem. Back-patch to 16, where bc971f4025c arrived. Reported-by: Tomas Vondra <tomas.vondra@enterprisedb.com> Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/2840876b-4cfe-240f-0a7e-29ffd66711e7%40enterprisedb.com
Diffstat (limited to 'contrib/postgres_fdw/postgres_fdw.c')
0 files changed, 0 insertions, 0 deletions