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:
parent
7e957cbb50
commit
e84712c738
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user