Patch from Jon Schutz to add a proper SIGCHLD repear to Engine::HTTP to fix issue...
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / HTTP.pm
index ec4ad86..725992e 100644 (file)
@@ -11,6 +11,7 @@ use NEXT;
 use Socket;
 use IO::Socket::INET ();
 use IO::Select       ();
+use POSIX ":sys_wait_h";
 
 # For PAR
 require Catalyst::Engine::HTTP::Restarter;
@@ -189,7 +190,7 @@ sub run {
     }
 
     my $restart = 0;
-    local $SIG{CHLD} = 'IGNORE';
+    local $SIG{CHLD} = \&_REAPER;
 
     my $allowed = $options->{allowed} || { '127.0.0.1' => '255.255.255.255' };
     my $addr = $host ? inet_aton($host) : INADDR_ANY;
@@ -525,6 +526,12 @@ sub _socket_data {
 
 sub _inet_addr { unpack "N*", inet_aton( $_[0] ) }
 
+sub _REAPER {
+    my $child;
+    while ( ( $child = waitpid( -1,WNOHANG ) ) > 0 ) { }
+    $SIG{CHLD} = \&_REAPER;
+}
+
 =head1 SEE ALSO
 
 L<Catalyst>, L<Catalyst::Engine>.