On Mon, 11 Dec 2006, Philip M. Gollucci wrote:

Grant wrote:
> >  Also, I tried restarting the interchange daemon with
> >  PERL_SIGNALS=unsafe and the ALERT/segfaults came MUCH MUCH more
> >  frequently.  Does that tell us anything?
> > > It would make sense that, when you have high load, there is a problem
>  processing many concurrent requests which triggers the PIPE signal, so
>  you should find out what the error is, and handle it more gracefully.
> > You might want to change the die sub to print out $! and $? - that may
>  give you a bit of a clue as to what caused the PIPE signal.
> > I'm guessing (and it is a guess) that the segfaults may be caused
>  because the die sub sends a web response, but that sub could be called
>  while your server is busy doing something else, and the two actions
>  collide.

 Very good guess.  Commenting out the web response stuff seems to have
 eliminated the segfaults.  Adding $! and $? to the warn line, I'm
 getting one of these two bits along with each ALERT now:

 Broken pipe 0
 Inappropriate ioctl for device 0
This could happen from a Cntrl-C or stop in a browser.

Add
require Carp;
Carp::cluck() to your die() function.

Is this someplace that checking $r->connection->aborted() would be useful?

Reply via email to