OSDN Git Service

Move call to GetTopTransactionId() earlier in LockAcquire(),
authorSimon Riggs <simon@2ndQuadrant.com>
Mon, 29 Nov 2010 01:10:56 +0000 (01:10 +0000)
committerSimon Riggs <simon@2ndQuadrant.com>
Mon, 29 Nov 2010 01:10:56 +0000 (01:10 +0000)
commit09425f89e764beabbdd30cc877b3de96f5d3d2b9
tree453f6b115f641e624c0262841d22736d80c281ef
parente6fa73e87a3f3aeb4694ad3d20a179fb76e12ce1
Move call to GetTopTransactionId() earlier in LockAcquire(),
removing an infrequently occurring race condition in Hot Standby.
An xid must be assigned before a lock appears in shared memory,
rather than immediately after, else GetRunningTransactionLocks()
may see InvalidTransactionId, causing assertion failures during
lock processing on standby.

Bug report and diagnosis by Fujii Masao, fix by me.
src/backend/storage/ipc/standby.c
src/backend/storage/lmgr/lock.c
src/include/storage/standby.h