@@ -565,7 +565,7 @@ LockHasWaiters(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock)
565
565
LOCALLOCK * locallock ;
566
566
LOCK * lock ;
567
567
PROCLOCK * proclock ;
568
- LWLockId partitionLock ;
568
+ LWLock * partitionLock ;
569
569
bool hasWaiters = false;
570
570
571
571
if (lockmethodid <= 0 || lockmethodid >= lengthof (LockMethods ))
@@ -702,7 +702,7 @@ LockAcquireExtended(const LOCKTAG *locktag,
702
702
bool found ;
703
703
ResourceOwner owner ;
704
704
uint32 hashcode ;
705
- LWLockId partitionLock ;
705
+ LWLock * partitionLock ;
706
706
int status ;
707
707
bool log_lock = false;
708
708
@@ -1744,7 +1744,7 @@ LockRelease(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock)
1744
1744
LOCALLOCK * locallock ;
1745
1745
LOCK * lock ;
1746
1746
PROCLOCK * proclock ;
1747
- LWLockId partitionLock ;
1747
+ LWLock * partitionLock ;
1748
1748
bool wakeupNeeded ;
1749
1749
1750
1750
if (lockmethodid <= 0 || lockmethodid >= lengthof (LockMethods ))
@@ -2096,10 +2096,12 @@ LockReleaseAll(LOCKMETHODID lockmethodid, bool allLocks)
2096
2096
*/
2097
2097
for (partition = 0 ; partition < NUM_LOCK_PARTITIONS ; partition ++ )
2098
2098
{
2099
- LWLockId partitionLock = FirstLockMgrLock + partition ;
2099
+ LWLock * partitionLock ;
2100
2100
SHM_QUEUE * procLocks = & (MyProc -> myProcLocks [partition ]);
2101
2101
PROCLOCK * nextplock ;
2102
2102
2103
+ partitionLock = LockHashPartitionLockByIndex (partition );
2104
+
2103
2105
/*
2104
2106
* If the proclock list for this partition is empty, we can skip
2105
2107
* acquiring the partition lock. This optimization is trickier than
@@ -2475,7 +2477,7 @@ static bool
2475
2477
FastPathTransferRelationLocks (LockMethod lockMethodTable , const LOCKTAG * locktag ,
2476
2478
uint32 hashcode )
2477
2479
{
2478
- LWLockId partitionLock = LockHashPartitionLock (hashcode );
2480
+ LWLock * partitionLock = LockHashPartitionLock (hashcode );
2479
2481
Oid relid = locktag -> locktag_field2 ;
2480
2482
uint32 i ;
2481
2483
@@ -2565,7 +2567,7 @@ FastPathGetRelationLockEntry(LOCALLOCK *locallock)
2565
2567
LockMethod lockMethodTable = LockMethods [DEFAULT_LOCKMETHOD ];
2566
2568
LOCKTAG * locktag = & locallock -> tag .lock ;
2567
2569
PROCLOCK * proclock = NULL ;
2568
- LWLockId partitionLock = LockHashPartitionLock (locallock -> hashcode );
2570
+ LWLock * partitionLock = LockHashPartitionLock (locallock -> hashcode );
2569
2571
Oid relid = locktag -> locktag_field2 ;
2570
2572
uint32 f ;
2571
2573
@@ -2671,7 +2673,7 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode)
2671
2673
SHM_QUEUE * procLocks ;
2672
2674
PROCLOCK * proclock ;
2673
2675
uint32 hashcode ;
2674
- LWLockId partitionLock ;
2676
+ LWLock * partitionLock ;
2675
2677
int count = 0 ;
2676
2678
int fast_count = 0 ;
2677
2679
@@ -2883,7 +2885,7 @@ LockRefindAndRelease(LockMethod lockMethodTable, PGPROC *proc,
2883
2885
PROCLOCKTAG proclocktag ;
2884
2886
uint32 hashcode ;
2885
2887
uint32 proclock_hashcode ;
2886
- LWLockId partitionLock ;
2888
+ LWLock * partitionLock ;
2887
2889
bool wakeupNeeded ;
2888
2890
2889
2891
hashcode = LockTagHashCode (locktag );
@@ -3159,10 +3161,12 @@ PostPrepare_Locks(TransactionId xid)
3159
3161
*/
3160
3162
for (partition = 0 ; partition < NUM_LOCK_PARTITIONS ; partition ++ )
3161
3163
{
3162
- LWLockId partitionLock = FirstLockMgrLock + partition ;
3164
+ LWLock * partitionLock ;
3163
3165
SHM_QUEUE * procLocks = & (MyProc -> myProcLocks [partition ]);
3164
3166
PROCLOCK * nextplock ;
3165
3167
3168
+ partitionLock = LockHashPartitionLockByIndex (partition );
3169
+
3166
3170
/*
3167
3171
* If the proclock list for this partition is empty, we can skip
3168
3172
* acquiring the partition lock. This optimization is safer than the
@@ -3400,7 +3404,7 @@ GetLockStatusData(void)
3400
3404
* Must grab LWLocks in partition-number order to avoid LWLock deadlock.
3401
3405
*/
3402
3406
for (i = 0 ; i < NUM_LOCK_PARTITIONS ; i ++ )
3403
- LWLockAcquire (FirstLockMgrLock + i , LW_SHARED );
3407
+ LWLockAcquire (LockHashPartitionLockByIndex ( i ) , LW_SHARED );
3404
3408
3405
3409
/* Now we can safely count the number of proclocks */
3406
3410
data -> nelements = el + hash_get_num_entries (LockMethodProcLockHash );
@@ -3442,7 +3446,7 @@ GetLockStatusData(void)
3442
3446
* behavior inside LWLockRelease.
3443
3447
*/
3444
3448
for (i = NUM_LOCK_PARTITIONS ; -- i >= 0 ;)
3445
- LWLockRelease (FirstLockMgrLock + i );
3449
+ LWLockRelease (LockHashPartitionLockByIndex ( i ) );
3446
3450
3447
3451
Assert (el == data -> nelements );
3448
3452
@@ -3477,7 +3481,7 @@ GetRunningTransactionLocks(int *nlocks)
3477
3481
* Must grab LWLocks in partition-number order to avoid LWLock deadlock.
3478
3482
*/
3479
3483
for (i = 0 ; i < NUM_LOCK_PARTITIONS ; i ++ )
3480
- LWLockAcquire (FirstLockMgrLock + i , LW_SHARED );
3484
+ LWLockAcquire (LockHashPartitionLockByIndex ( i ) , LW_SHARED );
3481
3485
3482
3486
/* Now we can safely count the number of proclocks */
3483
3487
els = hash_get_num_entries (LockMethodProcLockHash );
@@ -3537,7 +3541,7 @@ GetRunningTransactionLocks(int *nlocks)
3537
3541
* behavior inside LWLockRelease.
3538
3542
*/
3539
3543
for (i = NUM_LOCK_PARTITIONS ; -- i >= 0 ;)
3540
- LWLockRelease (FirstLockMgrLock + i );
3544
+ LWLockRelease (LockHashPartitionLockByIndex ( i ) );
3541
3545
3542
3546
* nlocks = index ;
3543
3547
return accessExclusiveLocks ;
@@ -3673,7 +3677,7 @@ lock_twophase_recover(TransactionId xid, uint16 info,
3673
3677
uint32 hashcode ;
3674
3678
uint32 proclock_hashcode ;
3675
3679
int partition ;
3676
- LWLockId partitionLock ;
3680
+ LWLock * partitionLock ;
3677
3681
LockMethod lockMethodTable ;
3678
3682
3679
3683
Assert (len == sizeof (TwoPhaseLockRecord ));
@@ -4044,7 +4048,7 @@ VirtualXactLock(VirtualTransactionId vxid, bool wait)
4044
4048
{
4045
4049
PROCLOCK * proclock ;
4046
4050
uint32 hashcode ;
4047
- LWLockId partitionLock ;
4051
+ LWLock * partitionLock ;
4048
4052
4049
4053
hashcode = LockTagHashCode (& tag );
4050
4054
0 commit comments