@@ -416,7 +416,7 @@ static void TerminateChildren(int signal);
416
416
#define SignalChildren (sig ) SignalSomeChildren(sig, BACKEND_TYPE_ALL)
417
417
418
418
static int CountChildren (int target );
419
- static bool assign_backendlist_entry (RegisteredBgWorker * rw );
419
+ static Backend * assign_backendlist_entry (void );
420
420
static void maybe_start_bgworkers (void );
421
421
static bool CreateOptsFile (int argc , char * argv [], char * fullprogname );
422
422
static pid_t StartChildProcess (BackendType type );
@@ -4028,6 +4028,7 @@ MaxLivePostmasterChildren(void)
4028
4028
static bool
4029
4029
do_start_bgworker (RegisteredBgWorker * rw )
4030
4030
{
4031
+ Backend * bn ;
4031
4032
pid_t worker_pid ;
4032
4033
4033
4034
Assert (rw -> rw_pid == 0 );
@@ -4042,11 +4043,14 @@ do_start_bgworker(RegisteredBgWorker *rw)
4042
4043
* tried again right away, most likely we'd find ourselves hitting the
4043
4044
* same resource-exhaustion condition.
4044
4045
*/
4045
- if (!assign_backendlist_entry (rw ))
4046
+ bn = assign_backendlist_entry ();
4047
+ if (bn == NULL )
4046
4048
{
4047
4049
rw -> rw_crashed_at = GetCurrentTimestamp ();
4048
4050
return false;
4049
4051
}
4052
+ rw -> rw_backend = bn ;
4053
+ rw -> rw_child_slot = bn -> child_slot ;
4050
4054
4051
4055
ereport (DEBUG1 ,
4052
4056
(errmsg_internal ("starting background worker process \"%s\"" ,
@@ -4119,12 +4123,10 @@ bgworker_should_start_now(BgWorkerStartTime start_time)
4119
4123
* Allocate the Backend struct for a connected background worker, but don't
4120
4124
* add it to the list of backends just yet.
4121
4125
*
4122
- * On failure, return false without changing any worker state.
4123
- *
4124
- * Some info from the Backend is copied into the passed rw.
4126
+ * On failure, return NULL.
4125
4127
*/
4126
- static bool
4127
- assign_backendlist_entry (RegisteredBgWorker * rw )
4128
+ static Backend *
4129
+ assign_backendlist_entry (void )
4128
4130
{
4129
4131
Backend * bn ;
4130
4132
@@ -4138,7 +4140,7 @@ assign_backendlist_entry(RegisteredBgWorker *rw)
4138
4140
ereport (LOG ,
4139
4141
(errcode (ERRCODE_CONFIGURATION_LIMIT_EXCEEDED ),
4140
4142
errmsg ("no slot available for new background worker process" )));
4141
- return false ;
4143
+ return NULL ;
4142
4144
}
4143
4145
4144
4146
bn = palloc_extended (sizeof (Backend ), MCXT_ALLOC_NO_OOM );
@@ -4147,18 +4149,15 @@ assign_backendlist_entry(RegisteredBgWorker *rw)
4147
4149
ereport (LOG ,
4148
4150
(errcode (ERRCODE_OUT_OF_MEMORY ),
4149
4151
errmsg ("out of memory" )));
4150
- return false ;
4152
+ return NULL ;
4151
4153
}
4152
4154
4153
4155
bn -> child_slot = MyPMChildSlot = AssignPostmasterChildSlot ();
4154
4156
bn -> bkend_type = BACKEND_TYPE_BGWORKER ;
4155
4157
bn -> dead_end = false;
4156
4158
bn -> bgworker_notify = false;
4157
4159
4158
- rw -> rw_backend = bn ;
4159
- rw -> rw_child_slot = bn -> child_slot ;
4160
-
4161
- return true;
4160
+ return bn ;
4162
4161
}
4163
4162
4164
4163
/*
0 commit comments