On Thu, Apr 14, 2022 at 11:21 AM Ruediger Pluem <[email protected]> wrote:
>
> On 4/13/22 5:41 PM, Yann Ylavic wrote:
> > On Wed, Apr 13, 2022 at 4:30 PM Ruediger Pluem <[email protected]> wrote:
> >>
> >> While looking at PR65769 I stumbled across the below in event.c (same in
> >> worker.c)
> >>
> >> 3460 /* Don't perform idle maintenance when a child dies,
> >> 3461 * only do it when there's a timeout. Remember only a
> >> 3462 * finite number of children can die, and it's pretty
> >> 3463 * pathological for a lot to die suddenly.
> >> 3464 */
> >> 3465 continue;
> >>
> >> In case several processes or even all die by a segfault we would wait
> >> until we have processed all that processes plus one second
> >> until we start new processes. Shouldn't we perform an
> >> perform_idle_server_maintenance in case the process died because of a fatal
> >> signal?
> >
> > +1
> >
>
> In order to solve this I would like to add another APEXIT_ constant (e.g.
> APEXIT_FATAL_SIGNAL).
Maybe something like:
Index: server/mpm/event/event.c
===================================================================
--- server/mpm/event/event.c (revision 1899818)
+++ server/mpm/event/event.c (working copy)
@@ -3462,7 +3462,9 @@ static void server_main_loop(int remaining_childre
* finite number of children can die, and it's pretty
* pathological for a lot to die suddenly.
*/
- continue;
+ if (!APR_PROC_CHECK_SIGNALED(exitwhy)) {
+ continue;
+ }
}
else if (remaining_children_to_start) {
/* we hit a 1 second timeout in which none of the previous
--
could do?
Any signal that killed the process would mean something unexpected
happened since we clean_child_exit() otherwise?
> Looking at httpd.h
> the values of the existing constants seem a little bit strange:
>
> /** a normal exit */
> #define APEXIT_OK 0x0
> /** A fatal error arising during the server's init sequence */
> #define APEXIT_INIT 0x2
> /** The child died during its init sequence */
> #define APEXIT_CHILDINIT 0x3
> /**
> * The child exited due to a resource shortage.
> * The parent should limit the rate of forking until
> * the situation is resolved.
> */
> #define APEXIT_CHILDSICK 0x7
> /**
> * A fatal error, resulting in the whole server aborting.
> * If a child exits with this error, the parent process
> * considers this a server-wide fatal error and aborts.
> */
> #define APEXIT_CHILDFATAL 0xf
>
>
> I haven't found any hint during my investigation why they are as they are on
> not just 1, 2, 3, ....
> Any ideas?
Nope :/
Regards;
Yann.