On Thu, Dec 2, 2021 at 9:07 PM Ruediger Pluem <[email protected]> wrote:
>
> On 12/2/21 7:31 PM, Yann Ylavic wrote:
> >
> > Full patch attached, we need to retain active_daemons too for this to
> > work actually.
> >
>
> Why do we need to retain active_daemons? When we get back after a restart
> there should be no active daemons any longer. They
> should be all gone or shutting down. The only active daemons we should have
> then should be the ones of the new generation.
Retaining active_daemons probably does not belong to the same patch
than the MaxSpareThreads changes (like I did), but it looks like
restarting (gracefully or not) with active_daemons = 0 is not correct
because the first call to perform_idle_server_maintenance() will find
the stopping processes old gen and do:
ps = &ap_scoreboard_image->parent[i];
if (ps->pid != 0) {
int child_threads_active = 0;
if (ps->quiescing == 1) {
ps->quiescing = 2;
active_daemons--;
}
...
}
Thus doubly account for the stopping daemons and leaving
active_daemons as a negative value?
I think that since r1893520 and the correct accounting of
active_daemons throughout perform_idle_server_maintenance() we'd
better let perform_idle_server_maintenance() handle
retained->active_daemons entirely.
Am I missing something?
Cheers;
Yann.