summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Riggs2010-01-29 19:45:12 +0000
committerSimon Riggs2010-01-29 19:45:12 +0000
commit29eedd312274a62dfc510be099873319762fdfcc (patch)
tree25f16b1ba9925cec380c20fc321a77cebb2258b0 /src
parent6d2bc0a6cf5c8d9a3241a0d7afaf5ca8bf1f11ec (diff)
Adjust GetLockConflicts() so that it uses TopMemoryContext when
executed InHotStandby. Cleaner solution than using malloc or palloc depending upon situation, as proposed by Tom.
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/lmgr/lock.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c
index 2c024f82993..cbc2070c37f 100644
--- a/src/backend/storage/lmgr/lock.c
+++ b/src/backend/storage/lmgr/lock.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.192 2010/01/28 10:05:37 sriggs Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.193 2010/01/29 19:45:12 sriggs Exp $
*
* NOTES
* A lock table is a shared memory hash table. When
@@ -1790,7 +1790,7 @@ LockReassignCurrentOwner(void)
VirtualTransactionId *
GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode)
{
- static VirtualTransactionId *vxids = NULL;
+ static VirtualTransactionId *vxids;
LOCKMETHODID lockmethodid = locktag->locktag_lockmethodid;
LockMethod lockMethodTable;
LOCK *lock;
@@ -1810,24 +1810,18 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode)
/*
* Allocate memory to store results, and fill with InvalidVXID. We only
* need enough space for MaxBackends + a terminator, since prepared xacts
- * don't count.
+ * don't count. InHotStandby allocate once in TopMemoryContext.
*/
- if (!InHotStandby)
- vxids = (VirtualTransactionId *)
- palloc0(sizeof(VirtualTransactionId) * (MaxBackends + 1));
- else
+ if (InHotStandby)
{
if (vxids == NULL)
- {
vxids = (VirtualTransactionId *)
- malloc(sizeof(VirtualTransactionId) * (MaxBackends + 1));
- if (vxids == NULL)
- ereport(ERROR,
- (errcode(ERRCODE_OUT_OF_MEMORY),
- errmsg("out of memory")));
-
- }
+ MemoryContextAlloc(TopMemoryContext,
+ sizeof(VirtualTransactionId) * (MaxBackends + 1));
}
+ else
+ vxids = (VirtualTransactionId *)
+ palloc0(sizeof(VirtualTransactionId) * (MaxBackends + 1));
/*
* Look up the lock object matching the tag.