@@ -150,12 +150,19 @@ btmask(BackendType t)
150150}
151151
152152static inline BackendTypeMask
153- btmask_add (BackendTypeMask mask , BackendType t )
153+ btmask_add_n (BackendTypeMask mask , int nargs , BackendType * t )
154154{
155- mask .mask |= 1 << t ;
155+ for (int i = 0 ; i < nargs ; i ++ )
156+ mask .mask |= 1 << t [i ];
156157 return mask ;
157158}
158159
160+ #define btmask_add (mask , ...) \
161+ btmask_add_n(mask, \
162+ lengthof(((BackendType[]){__VA_ARGS__})), \
163+ (BackendType[]){__VA_ARGS__} \
164+ )
165+
159166static inline BackendTypeMask
160167btmask_del (BackendTypeMask mask , BackendType t )
161168{
@@ -2840,22 +2847,27 @@ PostmasterStateMachine(void)
28402847 /*
28412848 * PM_WAIT_BACKENDS state ends when we have no regular backends, no
28422849 * autovac launcher or workers, and no bgworkers (including
2843- * unconnected ones). No walwriter, bgwriter, slot sync worker, or
2844- * WAL summarizer either.
2850+ * unconnected ones).
28452851 */
2846- targetMask = btmask_add (targetMask , B_BACKEND );
2847- targetMask = btmask_add (targetMask , B_AUTOVAC_LAUNCHER );
2848- targetMask = btmask_add (targetMask , B_AUTOVAC_WORKER );
2849- targetMask = btmask_add (targetMask , B_BG_WORKER );
2852+ targetMask = btmask_add (targetMask ,
2853+ B_BACKEND ,
2854+ B_AUTOVAC_LAUNCHER ,
2855+ B_AUTOVAC_WORKER ,
2856+ B_BG_WORKER );
28502857
2851- targetMask = btmask_add (targetMask , B_WAL_WRITER );
2852- targetMask = btmask_add (targetMask , B_BG_WRITER );
2853- targetMask = btmask_add (targetMask , B_SLOTSYNC_WORKER );
2854- targetMask = btmask_add (targetMask , B_WAL_SUMMARIZER );
2858+ /*
2859+ * No walwriter, bgwriter, slot sync worker, or WAL summarizer either.
2860+ */
2861+ targetMask = btmask_add (targetMask ,
2862+ B_WAL_WRITER ,
2863+ B_BG_WRITER ,
2864+ B_SLOTSYNC_WORKER ,
2865+ B_WAL_SUMMARIZER );
28552866
28562867 /* If we're in recovery, also stop startup and walreceiver procs */
2857- targetMask = btmask_add (targetMask , B_STARTUP );
2858- targetMask = btmask_add (targetMask , B_WAL_RECEIVER );
2868+ targetMask = btmask_add (targetMask ,
2869+ B_STARTUP ,
2870+ B_WAL_RECEIVER );
28592871
28602872 /*
28612873 * If we are doing crash recovery or an immediate shutdown then we
@@ -2878,17 +2890,19 @@ PostmasterStateMachine(void)
28782890 {
28792891 BackendTypeMask remainMask = BTYPE_MASK_NONE ;
28802892
2881- remainMask = btmask_add (remainMask , B_WAL_SENDER );
2882- remainMask = btmask_add (remainMask , B_ARCHIVER );
2883- remainMask = btmask_add (remainMask , B_DEAD_END_BACKEND );
2884- remainMask = btmask_add (remainMask , B_LOGGER );
2893+ remainMask = btmask_add (remainMask ,
2894+ B_WAL_SENDER ,
2895+ B_ARCHIVER ,
2896+ B_DEAD_END_BACKEND ,
2897+ B_LOGGER );
28852898
28862899 /* checkpointer may or may not be in targetMask already */
28872900 remainMask = btmask_add (remainMask , B_CHECKPOINTER );
28882901
28892902 /* these are not real postmaster children */
2890- remainMask = btmask_add (remainMask , B_INVALID );
2891- remainMask = btmask_add (remainMask , B_STANDALONE_BACKEND );
2903+ remainMask = btmask_add (remainMask ,
2904+ B_INVALID ,
2905+ B_STANDALONE_BACKEND );
28922906
28932907 /* All types should be included in targetMask or remainMask */
28942908 Assert ((remainMask .mask | targetMask .mask ) == BTYPE_MASK_ALL .mask );
0 commit comments