From e84712c73820839abfaa29c20cee0d3cabbf8f1c Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Fri, 10 Jan 2025 11:08:17 -0500 Subject: [PATCH] postmaster: Make btmask_add() variadic Suggested-by: Heikki Linnakangas Discussion: https://postgr.es/m/d2cd8fd3-396a-4390-8f0b-74be65e72899@iki.fi --- src/backend/postmaster/postmaster.c | 54 ++++++++++++++++++----------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 6da4cfe6082..98fc751fc59 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -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);