From f1e57a4ec9c0ce875683d556909a28a5549da455 Mon Sep 17 00:00:00 2001 From: Simon Riggs Date: Thu, 29 Nov 2012 21:59:11 +0000 Subject: [PATCH] Cleanup VirtualXact at end of Hot Standby. --- src/backend/storage/ipc/standby.c | 3 +++ src/backend/storage/lmgr/lock.c | 3 +-- src/include/storage/lock.h | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 9d2003867b..7fd94f3e50 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -105,6 +105,9 @@ ShutdownRecoveryTransactionEnvironment(void) /* Release all locks the tracked transactions were holding */ StandbyReleaseAllLocks(); + + /* Cleanup our VirtualTransaction */ + VirtualXactLockTableCleanup(); } diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 32cc229c86..0183443746 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -210,7 +210,6 @@ static bool FastPathUnGrantRelationLock(Oid relid, LOCKMODE lockmode); static bool FastPathTransferRelationLocks(LockMethod lockMethodTable, const LOCKTAG *locktag, uint32 hashcode); static PROCLOCK *FastPathGetRelationLockEntry(LOCALLOCK *locallock); -static void VirtualXactLockTableCleanup(void); /* * To make the fast-path lock mechanism work, we must have some way of @@ -3791,7 +3790,7 @@ VirtualXactLockTableInsert(VirtualTransactionId vxid) * Check whether a VXID lock has been materialized; if so, release it, * unblocking waiters. */ -static void +void VirtualXactLockTableCleanup() { bool fastpath; diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h index d56f0fa4b7..e01a5c5044 100644 --- a/src/include/storage/lock.h +++ b/src/include/storage/lock.h @@ -544,6 +544,7 @@ extern void DumpAllLocks(void); /* Lock a VXID (used to wait for a transaction to finish) */ extern void VirtualXactLockTableInsert(VirtualTransactionId vxid); +extern void VirtualXactLockTableCleanup(void); extern bool VirtualXactLock(VirtualTransactionId vxid, bool wait); #endif /* LOCK_H */