Repair a low-probability race condition identified by Qingqing Zhou.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 14 Apr 2006 03:38:56 +0000 (03:38 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 14 Apr 2006 03:38:56 +0000 (03:38 +0000)
commit0fcc3c2f1d3cc71aa8affe082568b6e033ffa429
tree2d2188ea4df90bd0c396dd56f0d28a64c173fbb0
parentcc39aca7d4a317a66db51a2180f7fee6e76084bd
Repair a low-probability race condition identified by Qingqing Zhou.
If a process abandons a wait in LockBufferForCleanup (in practice,
only happens if someone cancels a VACUUM) just before someone else
sends it a signal indicating the buffer is available, it was possible
for the wakeup to remain in the process' semaphore, causing misbehavior
next time the process waited for an lmgr lock.  Rather than try to
prevent the race condition directly, it seems best to make the lock
manager robust against leftover wakeups, by having it repeat waiting
on the semaphore if the lock has not actually been granted or denied
yet.
src/backend/storage/buffer/bufmgr.c
src/backend/storage/lmgr/lock.c
src/backend/storage/lmgr/proc.c
src/include/c.h
src/include/storage/proc.h