@@ -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{
117117if (Trace_lwlocks )
118118elog (LOG ,"%s(%s %d): excl %d shared %d head %p rOK %d" ,
@@ -406,9 +406,7 @@ LWLock *
406406LWLockAssign (void )
407407{
408408LWLock * result ;
409-
410- /* use volatile pointer to prevent code rearrangement */
411- volatile int * LWLockCounter ;
409+ int * LWLockCounter ;
412410
413411LWLockCounter = (int * ) ((char * )MainLWLockArray - 3 * sizeof (int ));
414412SpinLockAcquire (ShmemLock );
429427LWLockNewTrancheId (void )
430428{
431429int result ;
432-
433- /* use volatile pointer to prevent code rearrangement */
434- volatile int * LWLockCounter ;
430+ int * LWLockCounter ;
435431
436432LWLockCounter = (int * ) ((char * )MainLWLockArray - 3 * sizeof (int ));
437433SpinLockAcquire (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 ;
517512PGPROC * proc = MyProc ;
518513bool retry = false;
519514bool result = true;
@@ -525,7 +520,7 @@ LWLockAcquireCommon(LWLock *l, LWLockMode mode, uint64 *valptr, uint64 val)
525520PRINT_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 */
531526if (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
648643lwstats -> 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
653648for (;;)
654649{
@@ -659,9 +654,9 @@ LWLockAcquireCommon(LWLock *l, LWLockMode mode, uint64 *valptr, uint64 val)
659654extraWaits ++ ;
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. */
667662retry = 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. */
676671SpinLockRelease (& 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 ;
703697bool mustwait ;
704698
705699PRINT_LWDEBUG ("LWLockConditionalAcquire" ,lock );
@@ -747,14 +741,16 @@ LWLockConditionalAcquire(LWLock *l, LWLockMode mode)
747741{
748742/* Failed to get lock, so release interrupt holdoff */
749743RESUME_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}
753749else
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
760756return !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 ;
781776PGPROC * proc = MyProc ;
782777bool mustwait ;
783778int extraWaits = 0 ;
@@ -788,7 +783,7 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
788783PRINT_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
861857lwstats -> 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
866862for (;;)
867863{
@@ -872,9 +868,10 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
872868extraWaits ++ ;
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}
879876else
880877{
@@ -892,14 +889,16 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
892889{
893890/* Failed to get lock, so release interrupt holdoff */
894891RESUME_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}
898896else
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
905904return !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 ;
931928PGPROC * proc = MyProc ;
932929int extraWaits = 0 ;
933930bool result = false;
@@ -938,7 +935,7 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
938935PRINT_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}
982979else
983980{
984- value = * valp ;
981+ value = * valptr ;
985982if (value != oldval )
986983{
987984result = 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
10291026lwstats -> 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
10341032for (;;)
10351033{
@@ -1040,17 +1038,18 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
10401038extraWaits ++ ;
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. */
10511050SpinLockRelease (& 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 ;
10851082PGPROC * head ;
10861083PGPROC * proc ;
10871084PGPROC * next ;
@@ -1093,7 +1090,7 @@ LWLockUpdateVar(LWLock *l, uint64 *valptr, uint64 val)
10931090Assert (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 ;
11451141PGPROC * head ;
11461142PGPROC * proc ;
11471143int i ;
@@ -1154,11 +1150,11 @@ LWLockRelease(LWLock *l)
11541150 */
11551151for (i = num_held_lwlocks ;-- i >=0 ;)
11561152{
1157- if (l == held_lwlocks [i ])
1153+ if (lock == held_lwlocks [i ])
11581154break ;
11591155}
11601156if (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 ));
11621158num_held_lwlocks -- ;
11631159for (;i < num_held_lwlocks ;i ++ )
11641160held_lwlocks [i ]= held_lwlocks [i + 1 ];
@@ -1238,14 +1234,15 @@ LWLockRelease(LWLock *l)
12381234/* We are done updating shared state of the lock itself. */
12391235SpinLockRelease (& 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 */
12461242while (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" );
12491246proc = head ;
12501247head = proc -> lwWaitLink ;
12511248proc -> lwWaitLink = NULL ;