diff options
| author | Simon Riggs <simon@2ndQuadrant.com> | 2010-11-29 01:10:56 +0000 | 
|---|---|---|
| committer | Simon Riggs <simon@2ndQuadrant.com> | 2010-11-29 01:10:56 +0000 | 
| commit | 09425f89e764beabbdd30cc877b3de96f5d3d2b9 (patch) | |
| tree | 453f6b115f641e624c0262841d22736d80c281ef /src/include/storage/standby.h | |
| parent | e6fa73e87a3f3aeb4694ad3d20a179fb76e12ce1 (diff) | |
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.
Diffstat (limited to 'src/include/storage/standby.h')
| -rw-r--r-- | src/include/storage/standby.h | 1 | 
1 files changed, 1 insertions, 0 deletions
diff --git a/src/include/storage/standby.h b/src/include/storage/standby.h index 0654c5bcccf..42fa0c04a17 100644 --- a/src/include/storage/standby.h +++ b/src/include/storage/standby.h @@ -109,6 +109,7 @@ typedef struct RunningTransactionsData  typedef RunningTransactionsData *RunningTransactions;  extern void LogAccessExclusiveLock(Oid dbOid, Oid relOid); +extern void LogAccessExclusiveLockPrepare(void);  extern void LogStandbySnapshot(TransactionId *oldestActiveXid, TransactionId *nextXid);  | 
