1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-27 22:56:53 +03:00

postmaster: Make btmask_add() variadic

Suggested-by: Heikki Linnakangas <hlinnaka@iki.fi>
Discussion: https://postgr.es/m/d2cd8fd3-396a-4390-8f0b-74be65e72899@iki.fi
This commit is contained in:
Andres Freund 2025-01-10 11:08:17 -05:00
parent 7e957cbb50
commit e84712c738

View File

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