postmaster: Make btmask_add() variadic
authorAndres Freund <andres@anarazel.de>
Fri, 10 Jan 2025 16:08:17 +0000 (11:08 -0500)
committerAndres Freund <andres@anarazel.de>
Fri, 10 Jan 2025 16:43:00 +0000 (11:43 -0500)
Suggested-by: Heikki Linnakangas <hlinnaka@iki.fi>
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);