Thanks for the suggestion.  I tried it with prefork and the problem
still occurred.  HOWEVER, I then decided to remove all modules down to a
minimal example, and discovered that the mere inclusion of the following
module:

  use Test::MockObject;

was causing the segmentation fault after several successful requests,
even though no functions whatsoever were called.  Since this appears to
be a bug in Test::MockObject, I reported the bug here:
https://rt.cpan.org/Public/Bug/Display.html?id=73723

The bug report shows the exact minimal handler code that I used to
reproduce the bug.

Best wishes,
David


On Tue, 2012-01-03 at 17:26 -0500, Daniel Risacher wrote:
> I think I've been bitten by this too, years ago.
> 
> I *think* I solved it by switching to mpm_prefork, which was
> unsatisfying, but adequate for my needs.
> 
> On Tue, Jan 3, 2012 at 5:21 PM, David Booth <[email protected]> wrote:
> > I tried redirecting stderr to /dev/null and it did not help:
> > system("date >> $f 2> /dev/null");
> >
> > I am using the worker processing model.  Does it work for you (or anyone
> > else) without causing periodic child process segmentation faults?
> >
> >
> > On Tue, 2012-01-03 at 16:29 -0500, Daniel Risacher wrote:
> >> It's been a while since I looked at doing this, but IIRC it's fairly
> >> dependent on the processing model that Apache is using.  Are you
> >> mpm_prefork, or mpm_worker?
> >>
> >> Also, I found it was important to redirect stderr to /dev/null:
> >>
> >> sub play {
> >>     system "/usr/bin/xmms -t 2> /dev/null";
> >> }
> >>
> >>
> >> On Tue, Jan 3, 2012 at 12:48 PM, David Booth <[email protected]> wrote:
> >> > I am trying to run a shell command from a mod_perl2 response handler.
> >> > It works properly for some number of HTTP requests, but sometimes it
> >> > fails (somewhat randomly) and I see in my Apache2 error log that one of
> >> > the Apache2 child processes has died with a segmentation fault.
> >> > For example, /var/log/apache2/error.log shows:
> >> >
> >> > [Tue Jan 03 12:16:10 2012] [notice] child pid 3538 exit signal 
> >> > Segmentation fault (11)
> >> >
> >> > Is this normal?  How does one normally run a shell command from a
> >> > response handler?  I do not want to return the command's output to the
> >> > client.
> >> >
> >> > Here is a trivial example response handler that exhibits this behavior:
> >> >
> >> > sub handler
> >> > {
> >> > my $r = shift || die;
> >> > my $f = $ENV{DOCUMENT_ROOT} . "/date.txt";
> >> > system("date >> $f");
> >> > $r->internal_redirect("/date.txt");
> >> > return Apache2::Const::OK;
> >> > }
> >> >
> >> > Can anyone provide any guidance?  Does this work for you?
> >> >
> >> > Note that you may not notice the problem if you don't carefully watch
> >> > the Apache2 error log (e.g., with "tail -f /var/log/apache2/error.log"),
> >> > because Apache2 automatically spawns new children processes as needed,
> >> > and client (such as Firefox or wget, though not curl) seem to
> >> > automatically re-try the request when it fails, thus giving the illusion
> >> > of succeeding.
> >> >
> >> > P.S. I have posted about this on perlmonks, but thus far have not found
> >> > a solution:
> >> > http://www.perlmonks.org/?node_id=945947
> >> >
> >> >
> >> > --
> >> > David Booth, Ph.D.
> >> > http://dbooth.org/
> >> >
> >> > Opinions expressed herein are those of the author and do not necessarily
> >> > reflect those of his employer.
> >> >
> >>
> >>
> >
> > --
> > David Booth, Ph.D.
> > http://dbooth.org/
> >
> > Opinions expressed herein are those of the author and do not necessarily
> > reflect those of his employer.
> >
> 
> 

-- 
David Booth, Ph.D.
http://dbooth.org/

Opinions expressed herein are those of the author and do not necessarily
reflect those of his employer.

Reply via email to