File tree 1 file changed +18
-4
lines changed
1 file changed +18
-4
lines changed Original file line number Diff line number Diff line change 8
8
*
9
9
*
10
10
* IDENTIFICATION
11
- * $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.191 2010/01/23 16:37:12 sriggs Exp $
11
+ * $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.192 2010/01/28 10:05:37 sriggs Exp $
12
12
*
13
13
* NOTES
14
14
* A lock table is a shared memory hash table. When
@@ -1790,7 +1790,7 @@ LockReassignCurrentOwner(void)
1790
1790
VirtualTransactionId *
1791
1791
GetLockConflicts (const LOCKTAG * locktag , LOCKMODE lockmode )
1792
1792
{
1793
- VirtualTransactionId * vxids ;
1793
+ static VirtualTransactionId * vxids = NULL ;
1794
1794
LOCKMETHODID lockmethodid = locktag -> locktag_lockmethodid ;
1795
1795
LockMethod lockMethodTable ;
1796
1796
LOCK * lock ;
@@ -1812,8 +1812,22 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode)
1812
1812
* need enough space for MaxBackends + a terminator, since prepared xacts
1813
1813
* don't count.
1814
1814
*/
1815
- vxids = (VirtualTransactionId * )
1816
- palloc0 (sizeof (VirtualTransactionId ) * (MaxBackends + 1 ));
1815
+ if (!InHotStandby )
1816
+ vxids = (VirtualTransactionId * )
1817
+ palloc0 (sizeof (VirtualTransactionId ) * (MaxBackends + 1 ));
1818
+ else
1819
+ {
1820
+ if (vxids == NULL )
1821
+ {
1822
+ vxids = (VirtualTransactionId * )
1823
+ malloc (sizeof (VirtualTransactionId ) * (MaxBackends + 1 ));
1824
+ if (vxids == NULL )
1825
+ ereport (ERROR ,
1826
+ (errcode (ERRCODE_OUT_OF_MEMORY ),
1827
+ errmsg ("out of memory" )));
1828
+
1829
+ }
1830
+ }
1817
1831
1818
1832
/*
1819
1833
* Look up the lock object matching the tag.
You can’t perform that action at this time.
0 commit comments