@@ -150,12 +150,19 @@ btmask(BackendType t)
150
150
}
151
151
152
152
static inline BackendTypeMask
153
- btmask_add (BackendTypeMask mask , BackendType t )
153
+ btmask_add_n (BackendTypeMask mask , int nargs , BackendType * t )
154
154
{
155
- mask .mask |= 1 << t ;
155
+ for (int i = 0 ; i < nargs ; i ++ )
156
+ mask .mask |= 1 << t [i ];
156
157
return mask ;
157
158
}
158
159
160
+ #define btmask_add (mask , ...) \
161
+ btmask_add_n(mask, \
162
+ lengthof(((BackendType[]){__VA_ARGS__})), \
163
+ (BackendType[]){__VA_ARGS__} \
164
+ )
165
+
159
166
static inline BackendTypeMask
160
167
btmask_del (BackendTypeMask mask , BackendType t )
161
168
{
@@ -2840,22 +2847,27 @@ PostmasterStateMachine(void)
2840
2847
/*
2841
2848
* PM_WAIT_BACKENDS state ends when we have no regular backends, no
2842
2849
* 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).
2845
2851
*/
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 );
2850
2857
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 );
2855
2866
2856
2867
/* 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 );
2859
2871
2860
2872
/*
2861
2873
* If we are doing crash recovery or an immediate shutdown then we
@@ -2878,17 +2890,19 @@ PostmasterStateMachine(void)
2878
2890
{
2879
2891
BackendTypeMask remainMask = BTYPE_MASK_NONE ;
2880
2892
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 );
2885
2898
2886
2899
/* checkpointer may or may not be in targetMask already */
2887
2900
remainMask = btmask_add (remainMask , B_CHECKPOINTER );
2888
2901
2889
2902
/* 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 );
2892
2906
2893
2907
/* All types should be included in targetMask or remainMask */
2894
2908
Assert ((remainMask .mask | targetMask .mask ) == BTYPE_MASK_ALL .mask );
0 commit comments