Return-Path: Delivered-To: apache-bugdb-archive@hyperreal.org Received: (qmail 388 invoked by uid 6000); 1 Dec 1998 23:30:10 -0000 Received: (qmail 131 invoked by uid 2001); 1 Dec 1998 23:30:01 -0000 Date: 1 Dec 1998 23:30:01 -0000 Message-ID: <19981201233001.129.qmail@hyperreal.org> To: apache-bugdb@apache.org Cc: apache-bugdb@apache.org, From: "Christopher W. Curtis" Subject: Re: os-solaris/3467: Broken client connections not detected Reply-To: "Christopher W. Curtis" Sender: apache-bugdb-owner@apache.org Precedence: bulk The following reply was made to PR os-solaris/3467; it has been noted by GNATS. From: "Christopher W. Curtis" To: marc@apache.org Cc: apache-bugdb@apache.org, apbugs@apache.org Subject: Re: os-solaris/3467: Broken client connections not detected Date: Tue, 01 Dec 1998 18:21:24 -0500 marc@apache.org wrote: > > Synopsis: Broken client connections not detected > > State-Changed-From-To: open-feedback > State-Changed-By: marc > State-Changed-When: Tue Dec 1 09:22:47 PST 1998 > State-Changed-Why: > > Do you have any reason for thinking this is an Apache issue > and not a PHP issue? I posted it to the PHP list, but it seems unlikely to me that PHP would be it. PHP does not patch anything in Apache, and I am 99.997% sure that PHP is using the Apache-style read/write calls (PHP implements flush() because Apache buffers writes...). I looked at the code in http_main.c and think I know where the signal is being ignored, but I'm not familiar enough with the internals to know why everything happening in there that is. It does appear to make sense to ignore the signal, but for some reason the child is not exiting gracefully when it should. Maybe there is a hook that PHP uses to disable the pending_signal (was that it?) check; I really don't know. Neither Rasmus or Jim (both of whom are on the PHP list) have said anything about it, so I would have to conclude that they would agree here, but that may be presumptuous. I was going to truss further for you, but the server is hosed again and I need to drive over to reboot it. From what I remember, after the ignored SIGPIPE, there was an alerm(0); some setsigprocmask()s (two statements, I forget exactly which); then another alarm(non-zero). Apache/PHP and this script are apparently killing the server not less than twice a day, on average, since yesterday. A netstat -a shows each of these connections in a FIN_WAIT2, and the server-status handler show that they will stick in "G" mode when given a -USR1. When given a -HUP signal, httpd blocks for up to several minutes, presumably waiting to rebind to the port. Again, here, I'm not too sure the details... Thanks for any help, Christopher -- Oh My God! They Killed init! You Bastards!!