@@ -565,7 +565,7 @@ LockHasWaiters(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock)
565565 LOCALLOCK * locallock ;
566566 LOCK * lock ;
567567 PROCLOCK * proclock ;
568- LWLockId partitionLock ;
568+ LWLock * partitionLock ;
569569 bool hasWaiters = false;
570570
571571 if (lockmethodid <= 0 || lockmethodid >= lengthof (LockMethods ))
@@ -702,7 +702,7 @@ LockAcquireExtended(const LOCKTAG *locktag,
702702 bool found ;
703703 ResourceOwner owner ;
704704 uint32 hashcode ;
705- LWLockId partitionLock ;
705+ LWLock * partitionLock ;
706706 int status ;
707707 bool log_lock = false;
708708
@@ -1744,7 +1744,7 @@ LockRelease(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock)
17441744 LOCALLOCK * locallock ;
17451745 LOCK * lock ;
17461746 PROCLOCK * proclock ;
1747- LWLockId partitionLock ;
1747+ LWLock * partitionLock ;
17481748 bool wakeupNeeded ;
17491749
17501750 if (lockmethodid <= 0 || lockmethodid >= lengthof (LockMethods ))
@@ -2096,10 +2096,12 @@ LockReleaseAll(LOCKMETHODID lockmethodid, bool allLocks)
20962096 */
20972097 for (partition = 0 ; partition < NUM_LOCK_PARTITIONS ; partition ++ )
20982098 {
2099- LWLockId partitionLock = FirstLockMgrLock + partition ;
2099+ LWLock * partitionLock ;
21002100 SHM_QUEUE * procLocks = & (MyProc -> myProcLocks [partition ]);
21012101 PROCLOCK * nextplock ;
21022102
2103+ partitionLock = LockHashPartitionLockByIndex (partition );
2104+
21032105 /*
21042106 * If the proclock list for this partition is empty, we can skip
21052107 * acquiring the partition lock. This optimization is trickier than
@@ -2475,7 +2477,7 @@ static bool
24752477FastPathTransferRelationLocks (LockMethod lockMethodTable , const LOCKTAG * locktag ,
24762478 uint32 hashcode )
24772479{
2478- LWLockId partitionLock = LockHashPartitionLock (hashcode );
2480+ LWLock * partitionLock = LockHashPartitionLock (hashcode );
24792481 Oid relid = locktag -> locktag_field2 ;
24802482 uint32 i ;
24812483
@@ -2565,7 +2567,7 @@ FastPathGetRelationLockEntry(LOCALLOCK *locallock)
25652567 LockMethod lockMethodTable = LockMethods [DEFAULT_LOCKMETHOD ];
25662568 LOCKTAG * locktag = & locallock -> tag .lock ;
25672569 PROCLOCK * proclock = NULL ;
2568- LWLockId partitionLock = LockHashPartitionLock (locallock -> hashcode );
2570+ LWLock * partitionLock = LockHashPartitionLock (locallock -> hashcode );
25692571 Oid relid = locktag -> locktag_field2 ;
25702572 uint32 f ;
25712573
@@ -2671,7 +2673,7 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode)
26712673 SHM_QUEUE * procLocks ;
26722674 PROCLOCK * proclock ;
26732675 uint32 hashcode ;
2674- LWLockId partitionLock ;
2676+ LWLock * partitionLock ;
26752677 int count = 0 ;
26762678 int fast_count = 0 ;
26772679
@@ -2883,7 +2885,7 @@ LockRefindAndRelease(LockMethod lockMethodTable, PGPROC *proc,
28832885 PROCLOCKTAG proclocktag ;
28842886 uint32 hashcode ;
28852887 uint32 proclock_hashcode ;
2886- LWLockId partitionLock ;
2888+ LWLock * partitionLock ;
28872889 bool wakeupNeeded ;
28882890
28892891 hashcode = LockTagHashCode (locktag );
@@ -3159,10 +3161,12 @@ PostPrepare_Locks(TransactionId xid)
31593161 */
31603162 for (partition = 0 ; partition < NUM_LOCK_PARTITIONS ; partition ++ )
31613163 {
3162- LWLockId partitionLock = FirstLockMgrLock + partition ;
3164+ LWLock * partitionLock ;
31633165 SHM_QUEUE * procLocks = & (MyProc -> myProcLocks [partition ]);
31643166 PROCLOCK * nextplock ;
31653167
3168+ partitionLock = LockHashPartitionLockByIndex (partition );
3169+
31663170 /*
31673171 * If the proclock list for this partition is empty, we can skip
31683172 * acquiring the partition lock. This optimization is safer than the
@@ -3400,7 +3404,7 @@ GetLockStatusData(void)
34003404 * Must grab LWLocks in partition-number order to avoid LWLock deadlock.
34013405 */
34023406 for (i = 0 ; i < NUM_LOCK_PARTITIONS ; i ++ )
3403- LWLockAcquire (FirstLockMgrLock + i , LW_SHARED );
3407+ LWLockAcquire (LockHashPartitionLockByIndex ( i ) , LW_SHARED );
34043408
34053409 /* Now we can safely count the number of proclocks */
34063410 data -> nelements = el + hash_get_num_entries (LockMethodProcLockHash );
@@ -3442,7 +3446,7 @@ GetLockStatusData(void)
34423446 * behavior inside LWLockRelease.
34433447 */
34443448 for (i = NUM_LOCK_PARTITIONS ; -- i >= 0 ;)
3445- LWLockRelease (FirstLockMgrLock + i );
3449+ LWLockRelease (LockHashPartitionLockByIndex ( i ) );
34463450
34473451 Assert (el == data -> nelements );
34483452
@@ -3477,7 +3481,7 @@ GetRunningTransactionLocks(int *nlocks)
34773481 * Must grab LWLocks in partition-number order to avoid LWLock deadlock.
34783482 */
34793483 for (i = 0 ; i < NUM_LOCK_PARTITIONS ; i ++ )
3480- LWLockAcquire (FirstLockMgrLock + i , LW_SHARED );
3484+ LWLockAcquire (LockHashPartitionLockByIndex ( i ) , LW_SHARED );
34813485
34823486 /* Now we can safely count the number of proclocks */
34833487 els = hash_get_num_entries (LockMethodProcLockHash );
@@ -3537,7 +3541,7 @@ GetRunningTransactionLocks(int *nlocks)
35373541 * behavior inside LWLockRelease.
35383542 */
35393543 for (i = NUM_LOCK_PARTITIONS ; -- i >= 0 ;)
3540- LWLockRelease (FirstLockMgrLock + i );
3544+ LWLockRelease (LockHashPartitionLockByIndex ( i ) );
35413545
35423546 * nlocks = index ;
35433547 return accessExclusiveLocks ;
@@ -3673,7 +3677,7 @@ lock_twophase_recover(TransactionId xid, uint16 info,
36733677 uint32 hashcode ;
36743678 uint32 proclock_hashcode ;
36753679 int partition ;
3676- LWLockId partitionLock ;
3680+ LWLock * partitionLock ;
36773681 LockMethod lockMethodTable ;
36783682
36793683 Assert (len == sizeof (TwoPhaseLockRecord ));
@@ -4044,7 +4048,7 @@ VirtualXactLock(VirtualTransactionId vxid, bool wait)
40444048 {
40454049 PROCLOCK * proclock ;
40464050 uint32 hashcode ;
4047- LWLockId partitionLock ;
4051+ LWLock * partitionLock ;
40484052
40494053 hashcode = LockTagHashCode (& tag );
40504054
0 commit comments