@@ -112,7 +112,7 @@ static lwlock_stats lwlock_stats_dummy;
112112bool Trace_lwlocks = false;
113113
114114inline static void
115- PRINT_LWDEBUG (const char * where , const volatile LWLock * lock )
115+ PRINT_LWDEBUG (const char * where , const LWLock * lock )
116116{
117117 if (Trace_lwlocks )
118118 elog (LOG , "%s(%s %d): excl %d shared %d head %p rOK %d" ,
@@ -406,9 +406,7 @@ LWLock *
406406LWLockAssign (void )
407407{
408408 LWLock * result ;
409-
410- /* use volatile pointer to prevent code rearrangement */
411- volatile int * LWLockCounter ;
409+ int * LWLockCounter ;
412410
413411 LWLockCounter = (int * ) ((char * ) MainLWLockArray - 3 * sizeof (int ));
414412 SpinLockAcquire (ShmemLock );
429427LWLockNewTrancheId (void )
430428{
431429 int result ;
432-
433- /* use volatile pointer to prevent code rearrangement */
434- volatile int * LWLockCounter ;
430+ int * LWLockCounter ;
435431
436432 LWLockCounter = (int * ) ((char * ) MainLWLockArray - 3 * sizeof (int ));
437433 SpinLockAcquire (ShmemLock );
@@ -511,9 +507,8 @@ LWLockAcquireWithVar(LWLock *l, uint64 *valptr, uint64 val)
511507
512508/* internal function to implement LWLockAcquire and LWLockAcquireWithVar */
513509static inline bool
514- LWLockAcquireCommon (LWLock * l , LWLockMode mode , uint64 * valptr , uint64 val )
510+ LWLockAcquireCommon (LWLock * lock , LWLockMode mode , uint64 * valptr , uint64 val )
515511{
516- volatile LWLock * lock = l ;
517512 PGPROC * proc = MyProc ;
518513 bool retry = false;
519514 bool result = true;
@@ -525,7 +520,7 @@ LWLockAcquireCommon(LWLock *l, LWLockMode mode, uint64 *valptr, uint64 val)
525520 PRINT_LWDEBUG ("LWLockAcquire" , lock );
526521
527522#ifdef LWLOCK_STATS
528- lwstats = get_lwlock_stats_entry (l );
523+ lwstats = get_lwlock_stats_entry (lock );
529524
530525 /* Count lock acquisition attempts */
531526 if (mode == LW_EXCLUSIVE )
@@ -642,13 +637,13 @@ LWLockAcquireCommon(LWLock *l, LWLockMode mode, uint64 *valptr, uint64 val)
642637 * so that the lock manager or signal manager will see the received
643638 * signal when it next waits.
644639 */
645- LOG_LWDEBUG ("LWLockAcquire" , T_NAME (l ), T_ID (l ), "waiting" );
640+ LOG_LWDEBUG ("LWLockAcquire" , T_NAME (lock ), T_ID (lock ), "waiting" );
646641
647642#ifdef LWLOCK_STATS
648643 lwstats -> block_count ++ ;
649644#endif
650645
651- TRACE_POSTGRESQL_LWLOCK_WAIT_START (T_NAME (l ), T_ID (l ), mode );
646+ TRACE_POSTGRESQL_LWLOCK_WAIT_START (T_NAME (lock ), T_ID (lock ), mode );
652647
653648 for (;;)
654649 {
@@ -659,9 +654,9 @@ LWLockAcquireCommon(LWLock *l, LWLockMode mode, uint64 *valptr, uint64 val)
659654 extraWaits ++ ;
660655 }
661656
662- TRACE_POSTGRESQL_LWLOCK_WAIT_DONE (T_NAME (l ), T_ID (l ), mode );
657+ TRACE_POSTGRESQL_LWLOCK_WAIT_DONE (T_NAME (lock ), T_ID (lock ), mode );
663658
664- LOG_LWDEBUG ("LWLockAcquire" , T_NAME (l ), T_ID (l ), "awakened" );
659+ LOG_LWDEBUG ("LWLockAcquire" , T_NAME (lock ), T_ID (lock ), "awakened" );
665660
666661 /* Now loop back and try to acquire lock again. */
667662 retry = true;
@@ -675,10 +670,10 @@ LWLockAcquireCommon(LWLock *l, LWLockMode mode, uint64 *valptr, uint64 val)
675670 /* We are done updating shared state of the lock itself. */
676671 SpinLockRelease (& lock -> mutex );
677672
678- TRACE_POSTGRESQL_LWLOCK_ACQUIRE (T_NAME (l ), T_ID (l ), mode );
673+ TRACE_POSTGRESQL_LWLOCK_ACQUIRE (T_NAME (lock ), T_ID (lock ), mode );
679674
680675 /* Add lock to list of locks held by this backend */
681- held_lwlocks [num_held_lwlocks ++ ] = l ;
676+ held_lwlocks [num_held_lwlocks ++ ] = lock ;
682677
683678 /*
684679 * Fix the process wait semaphore's count for any absorbed wakeups.
@@ -697,9 +692,8 @@ LWLockAcquireCommon(LWLock *l, LWLockMode mode, uint64 *valptr, uint64 val)
697692 * If successful, cancel/die interrupts are held off until lock release.
698693 */
699694bool
700- LWLockConditionalAcquire (LWLock * l , LWLockMode mode )
695+ LWLockConditionalAcquire (LWLock * lock , LWLockMode mode )
701696{
702- volatile LWLock * lock = l ;
703697 bool mustwait ;
704698
705699 PRINT_LWDEBUG ("LWLockConditionalAcquire" , lock );
@@ -747,14 +741,16 @@ LWLockConditionalAcquire(LWLock *l, LWLockMode mode)
747741 {
748742 /* Failed to get lock, so release interrupt holdoff */
749743 RESUME_INTERRUPTS ();
750- LOG_LWDEBUG ("LWLockConditionalAcquire" , T_NAME (l ), T_ID (l ), "failed" );
751- TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL (T_NAME (l ), T_ID (l ), mode );
744+ LOG_LWDEBUG ("LWLockConditionalAcquire" ,
745+ T_NAME (lock ), T_ID (lock ), "failed" );
746+ TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL (T_NAME (lock ),
747+ T_ID (lock ), mode );
752748 }
753749 else
754750 {
755751 /* Add lock to list of locks held by this backend */
756- held_lwlocks [num_held_lwlocks ++ ] = l ;
757- TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE (T_NAME (l ), T_ID (l ), mode );
752+ held_lwlocks [num_held_lwlocks ++ ] = lock ;
753+ TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE (T_NAME (lock ), T_ID (lock ), mode );
758754 }
759755
760756 return !mustwait ;
@@ -775,9 +771,8 @@ LWLockConditionalAcquire(LWLock *l, LWLockMode mode)
775771 * wake up, observe that their records have already been flushed, and return.
776772 */
777773bool
778- LWLockAcquireOrWait (LWLock * l , LWLockMode mode )
774+ LWLockAcquireOrWait (LWLock * lock , LWLockMode mode )
779775{
780- volatile LWLock * lock = l ;
781776 PGPROC * proc = MyProc ;
782777 bool mustwait ;
783778 int extraWaits = 0 ;
@@ -788,7 +783,7 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
788783 PRINT_LWDEBUG ("LWLockAcquireOrWait" , lock );
789784
790785#ifdef LWLOCK_STATS
791- lwstats = get_lwlock_stats_entry (l );
786+ lwstats = get_lwlock_stats_entry (lock );
792787#endif
793788
794789 /* Ensure we will have room to remember the lock */
@@ -855,13 +850,14 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
855850 * Wait until awakened. Like in LWLockAcquire, be prepared for bogus
856851 * wakups, because we share the semaphore with ProcWaitForSignal.
857852 */
858- LOG_LWDEBUG ("LWLockAcquireOrWait" , T_NAME (l ), T_ID (l ), "waiting" );
853+ LOG_LWDEBUG ("LWLockAcquireOrWait" , T_NAME (lock ), T_ID (lock ),
854+ "waiting" );
859855
860856#ifdef LWLOCK_STATS
861857 lwstats -> block_count ++ ;
862858#endif
863859
864- TRACE_POSTGRESQL_LWLOCK_WAIT_START (T_NAME (l ), T_ID (l ), mode );
860+ TRACE_POSTGRESQL_LWLOCK_WAIT_START (T_NAME (lock ), T_ID (lock ), mode );
865861
866862 for (;;)
867863 {
@@ -872,9 +868,10 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
872868 extraWaits ++ ;
873869 }
874870
875- TRACE_POSTGRESQL_LWLOCK_WAIT_DONE (T_NAME (l ), T_ID (l ), mode );
871+ TRACE_POSTGRESQL_LWLOCK_WAIT_DONE (T_NAME (lock ), T_ID (lock ), mode );
876872
877- LOG_LWDEBUG ("LWLockAcquireOrWait" , T_NAME (l ), T_ID (l ), "awakened" );
873+ LOG_LWDEBUG ("LWLockAcquireOrWait" , T_NAME (lock ), T_ID (lock ),
874+ "awakened" );
878875 }
879876 else
880877 {
@@ -892,14 +889,16 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
892889 {
893890 /* Failed to get lock, so release interrupt holdoff */
894891 RESUME_INTERRUPTS ();
895- LOG_LWDEBUG ("LWLockAcquireOrWait" , T_NAME (l ), T_ID (l ), "failed" );
896- TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_FAIL (T_NAME (l ), T_ID (l ), mode );
892+ LOG_LWDEBUG ("LWLockAcquireOrWait" , T_NAME (lock ), T_ID (lock ), "failed" );
893+ TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_FAIL (T_NAME (lock ), T_ID (lock ),
894+ mode );
897895 }
898896 else
899897 {
900898 /* Add lock to list of locks held by this backend */
901- held_lwlocks [num_held_lwlocks ++ ] = l ;
902- TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT (T_NAME (l ), T_ID (l ), mode );
899+ held_lwlocks [num_held_lwlocks ++ ] = lock ;
900+ TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT (T_NAME (lock ), T_ID (lock ),
901+ mode );
903902 }
904903
905904 return !mustwait ;
@@ -924,10 +923,8 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
924923 * in shared mode, returns 'true'.
925924 */
926925bool
927- LWLockWaitForVar (LWLock * l , uint64 * valptr , uint64 oldval , uint64 * newval )
926+ LWLockWaitForVar (LWLock * lock , uint64 * valptr , uint64 oldval , uint64 * newval )
928927{
929- volatile LWLock * lock = l ;
930- volatile uint64 * valp = valptr ;
931928 PGPROC * proc = MyProc ;
932929 int extraWaits = 0 ;
933930 bool result = false;
@@ -938,7 +935,7 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
938935 PRINT_LWDEBUG ("LWLockWaitForVar" , lock );
939936
940937#ifdef LWLOCK_STATS
941- lwstats = get_lwlock_stats_entry (l );
938+ lwstats = get_lwlock_stats_entry (lock );
942939#endif /* LWLOCK_STATS */
943940
944941 /*
@@ -981,7 +978,7 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
981978 }
982979 else
983980 {
984- value = * valp ;
981+ value = * valptr ;
985982 if (value != oldval )
986983 {
987984 result = false;
@@ -1023,13 +1020,14 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
10231020 * so that the lock manager or signal manager will see the received
10241021 * signal when it next waits.
10251022 */
1026- LOG_LWDEBUG ("LWLockWaitForVar" , T_NAME (l ), T_ID (l ), "waiting" );
1023+ LOG_LWDEBUG ("LWLockWaitForVar" , T_NAME (lock ), T_ID (lock ), "waiting" );
10271024
10281025#ifdef LWLOCK_STATS
10291026 lwstats -> block_count ++ ;
10301027#endif
10311028
1032- TRACE_POSTGRESQL_LWLOCK_WAIT_START (T_NAME (l ), T_ID (l ), LW_EXCLUSIVE );
1029+ TRACE_POSTGRESQL_LWLOCK_WAIT_START (T_NAME (lock ), T_ID (lock ),
1030+ LW_EXCLUSIVE );
10331031
10341032 for (;;)
10351033 {
@@ -1040,17 +1038,18 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
10401038 extraWaits ++ ;
10411039 }
10421040
1043- TRACE_POSTGRESQL_LWLOCK_WAIT_DONE (T_NAME (l ), T_ID (l ), LW_EXCLUSIVE );
1041+ TRACE_POSTGRESQL_LWLOCK_WAIT_DONE (T_NAME (lock ), T_ID (lock ),
1042+ LW_EXCLUSIVE );
10441043
1045- LOG_LWDEBUG ("LWLockWaitForVar" , T_NAME (l ), T_ID (l ), "awakened" );
1044+ LOG_LWDEBUG ("LWLockWaitForVar" , T_NAME (lock ), T_ID (lock ), "awakened" );
10461045
10471046 /* Now loop back and check the status of the lock again. */
10481047 }
10491048
10501049 /* We are done updating shared state of the lock itself. */
10511050 SpinLockRelease (& lock -> mutex );
10521051
1053- TRACE_POSTGRESQL_LWLOCK_ACQUIRE (T_NAME (l ), T_ID (l ), LW_EXCLUSIVE );
1052+ TRACE_POSTGRESQL_LWLOCK_ACQUIRE (T_NAME (lock ), T_ID (lock ), LW_EXCLUSIVE );
10541053
10551054 /*
10561055 * Fix the process wait semaphore's count for any absorbed wakeups.
@@ -1078,10 +1077,8 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
10781077 * The caller must be holding the lock in exclusive mode.
10791078 */
10801079void
1081- LWLockUpdateVar (LWLock * l , uint64 * valptr , uint64 val )
1080+ LWLockUpdateVar (LWLock * lock , uint64 * valptr , uint64 val )
10821081{
1083- volatile LWLock * lock = l ;
1084- volatile uint64 * valp = valptr ;
10851082 PGPROC * head ;
10861083 PGPROC * proc ;
10871084 PGPROC * next ;
@@ -1093,7 +1090,7 @@ LWLockUpdateVar(LWLock *l, uint64 *valptr, uint64 val)
10931090 Assert (lock -> exclusive == 1 );
10941091
10951092 /* Update the lock's value */
1096- * valp = val ;
1093+ * valptr = val ;
10971094
10981095 /*
10991096 * See if there are any LW_WAIT_UNTIL_FREE waiters that need to be woken
@@ -1139,9 +1136,8 @@ LWLockUpdateVar(LWLock *l, uint64 *valptr, uint64 val)
11391136 * LWLockRelease - release a previously acquired lock
11401137 */
11411138void
1142- LWLockRelease (LWLock * l )
1139+ LWLockRelease (LWLock * lock )
11431140{
1144- volatile LWLock * lock = l ;
11451141 PGPROC * head ;
11461142 PGPROC * proc ;
11471143 int i ;
@@ -1154,11 +1150,11 @@ LWLockRelease(LWLock *l)
11541150 */
11551151 for (i = num_held_lwlocks ; -- i >= 0 ;)
11561152 {
1157- if (l == held_lwlocks [i ])
1153+ if (lock == held_lwlocks [i ])
11581154 break ;
11591155 }
11601156 if (i < 0 )
1161- elog (ERROR , "lock %s %d is not held" , T_NAME (l ), T_ID (l ));
1157+ elog (ERROR , "lock %s %d is not held" , T_NAME (lock ), T_ID (lock ));
11621158 num_held_lwlocks -- ;
11631159 for (; i < num_held_lwlocks ; i ++ )
11641160 held_lwlocks [i ] = held_lwlocks [i + 1 ];
@@ -1238,14 +1234,15 @@ LWLockRelease(LWLock *l)
12381234 /* We are done updating shared state of the lock itself. */
12391235 SpinLockRelease (& lock -> mutex );
12401236
1241- TRACE_POSTGRESQL_LWLOCK_RELEASE (T_NAME (l ), T_ID (l ));
1237+ TRACE_POSTGRESQL_LWLOCK_RELEASE (T_NAME (lock ), T_ID (lock ));
12421238
12431239 /*
12441240 * Awaken any waiters I removed from the queue.
12451241 */
12461242 while (head != NULL )
12471243 {
1248- LOG_LWDEBUG ("LWLockRelease" , T_NAME (l ), T_ID (l ), "release waiter" );
1244+ LOG_LWDEBUG ("LWLockRelease" , T_NAME (lock ), T_ID (lock ),
1245+ "release waiter" );
12491246 proc = head ;
12501247 head = proc -> lwWaitLink ;
12511248 proc -> lwWaitLink = NULL ;
0 commit comments