postmaster: Make btmask_add() variadic
authorAndres Freund <[email protected]>
Fri, 10 Jan 2025 16:08:17 +0000 (11:08 -0500)
committerAndres Freund <[email protected]>
Fri, 10 Jan 2025 16:43:00 +0000 (11:43 -0500)
Suggested-by: Heikki Linnakangas <[email protected]>
Discussion: https://postgr.es/m/d2cd8fd3-396a-4390-8f0b-74be65e72899@iki.fi

src/backend/postmaster/postmaster.c

index 6da4cfe6082bee2b08556cff7cccd411c9b6c20f..98fc751fc59421cee42afec7e8fca00267b020c8 100644 (file)
@@ -150,12 +150,19 @@ btmask(BackendType t)
 }
 
 static inline BackendTypeMask
-btmask_add(BackendTypeMask mask, BackendType t)
+btmask_add_n(BackendTypeMask mask, int nargs, BackendType *t)
 {
-   mask.mask |= 1 << t;
+   for (int i = 0; i < nargs; i++)
+       mask.mask |= 1 << t[i];
    return mask;
 }
 
+#define btmask_add(mask, ...) \
+   btmask_add_n(mask, \
+       lengthof(((BackendType[]){__VA_ARGS__})), \
+       (BackendType[]){__VA_ARGS__} \
+   )
+
 static inline BackendTypeMask
 btmask_del(BackendTypeMask mask, BackendType t)
 {
@@ -2840,22 +2847,27 @@ PostmasterStateMachine(void)
        /*
         * PM_WAIT_BACKENDS state ends when we have no regular backends, no
         * autovac launcher or workers, and no bgworkers (including
-        * unconnected ones).  No walwriter, bgwriter, slot sync worker, or
-        * WAL summarizer either.
+        * unconnected ones).
         */
-       targetMask = btmask_add(targetMask, B_BACKEND);
-       targetMask = btmask_add(targetMask, B_AUTOVAC_LAUNCHER);
-       targetMask = btmask_add(targetMask, B_AUTOVAC_WORKER);
-       targetMask = btmask_add(targetMask, B_BG_WORKER);
+       targetMask = btmask_add(targetMask,
+                               B_BACKEND,
+                               B_AUTOVAC_LAUNCHER,
+                               B_AUTOVAC_WORKER,
+                               B_BG_WORKER);
 
-       targetMask = btmask_add(targetMask, B_WAL_WRITER);
-       targetMask = btmask_add(targetMask, B_BG_WRITER);
-       targetMask = btmask_add(targetMask, B_SLOTSYNC_WORKER);
-       targetMask = btmask_add(targetMask, B_WAL_SUMMARIZER);
+       /*
+        * No walwriter, bgwriter, slot sync worker, or WAL summarizer either.
+        */
+       targetMask = btmask_add(targetMask,
+                               B_WAL_WRITER,
+                               B_BG_WRITER,
+                               B_SLOTSYNC_WORKER,
+                               B_WAL_SUMMARIZER);
 
        /* If we're in recovery, also stop startup and walreceiver procs */
-       targetMask = btmask_add(targetMask, B_STARTUP);
-       targetMask = btmask_add(targetMask, B_WAL_RECEIVER);
+       targetMask = btmask_add(targetMask,
+                               B_STARTUP,
+                               B_WAL_RECEIVER);
 
        /*
         * If we are doing crash recovery or an immediate shutdown then we
@@ -2878,17 +2890,19 @@ PostmasterStateMachine(void)
        {
            BackendTypeMask remainMask = BTYPE_MASK_NONE;
 
-           remainMask = btmask_add(remainMask, B_WAL_SENDER);
-           remainMask = btmask_add(remainMask, B_ARCHIVER);
-           remainMask = btmask_add(remainMask, B_DEAD_END_BACKEND);
-           remainMask = btmask_add(remainMask, B_LOGGER);
+           remainMask = btmask_add(remainMask,
+                                   B_WAL_SENDER,
+                                   B_ARCHIVER,
+                                   B_DEAD_END_BACKEND,
+                                   B_LOGGER);
 
            /* checkpointer may or may not be in targetMask already */
            remainMask = btmask_add(remainMask, B_CHECKPOINTER);
 
            /* these are not real postmaster children */
-           remainMask = btmask_add(remainMask, B_INVALID);
-           remainMask = btmask_add(remainMask, B_STANDALONE_BACKEND);
+           remainMask = btmask_add(remainMask,
+                                   B_INVALID,
+                                   B_STANDALONE_BACKEND);
 
            /* All types should be included in targetMask or remainMask */
            Assert((remainMask.mask | targetMask.mask) == BTYPE_MASK_ALL.mask);