On Wed, Jul 08, 2026 at 05:43:01PM +0000, Heikki Linnakangas wrote:
> Switch to pg_atomic_uint32 for the fields. Seems easier to reason
> about than volatile pointers. There was some precedence for that, as
> were already using pg_atomic_uint32 for the procArrayGroupFirst and
> clogGroupFirst fields, which also store ProcNumbers.

Since removing volatile qualifiers is on my mind, I noticed that this patch
makes it possible to remove two more.  Patch attached.

-- 
nathan
diff --git a/src/backend/postmaster/checkpointer.c 
b/src/backend/postmaster/checkpointer.c
index a09d4097d51..f6351f1eb10 100644
--- a/src/backend/postmaster/checkpointer.c
+++ b/src/backend/postmaster/checkpointer.c
@@ -1114,8 +1114,7 @@ RequestCheckpoint(int flags)
 #define MAX_SIGNAL_TRIES 600   /* max wait 60.0 sec */
        for (ntries = 0;; ntries++)
        {
-               volatile PROC_HDR *procglobal = ProcGlobal;
-               ProcNumber      checkpointerProc = 
pg_atomic_read_u32(&procglobal->checkpointerProc);
+               ProcNumber      checkpointerProc = 
pg_atomic_read_u32(&ProcGlobal->checkpointerProc);
 
                if (checkpointerProc == INVALID_PROC_NUMBER)
                {
@@ -1536,8 +1535,7 @@ FirstCallSinceLastCheckpoint(void)
 void
 WakeupCheckpointer(void)
 {
-       volatile PROC_HDR *procglobal = ProcGlobal;
-       ProcNumber      checkpointerProc = 
pg_atomic_read_u32(&procglobal->checkpointerProc);
+       ProcNumber      checkpointerProc = 
pg_atomic_read_u32(&ProcGlobal->checkpointerProc);
 
        if (checkpointerProc != INVALID_PROC_NUMBER)
                SetLatch(&GetPGProcByNumber(checkpointerProc)->procLatch);

Reply via email to