Reverted restarter change, until some fixes are made
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / HTTP.pm
index 77bb798..332e771 100644 (file)
@@ -111,11 +111,7 @@ sub read_chunk {
 sub run {
     my ( $self, $class, $port, $host, $options ) = @_;
 
-    our $GOT_HUP;
-    local $GOT_HUP = 0;
-
-    local $SIG{HUP} = sub { $GOT_HUP = 1; };
-    local $SIG{CHLD} = 'IGNORE';
+    $options ||= {};
 
     # Setup restarter
     my $restarter;
@@ -133,7 +129,11 @@ sub run {
             my $regex = $options->{restart_regex};
             my $one   = _index( $dir, $regex );
           RESTART: while (1) {
-                sleep $options->{restart_delay};
+                sleep $options->{restart_delay} || 1;
+                
+                # check if our parent has died
+                exit if ( getppid == 1 );
+                
                 my $two     = _index( $dir,         $regex );
                 my $changes = _compare_index( $one, $two );
                 if (@$changes) {
@@ -144,7 +144,7 @@ sub run {
                         next unless $file =~ /\.pm$/;
                         if ( my $error = _test($file) ) {
                             print STDERR
-                              qq/File "$file" modified, not restarting\n/;
+                              qq/File "$file" modified, not restarting\n\n/;
                             print STDERR '*' x 80, "\n";
                             print STDERR $error;
                             print STDERR '*' x 80, "\n";
@@ -154,22 +154,32 @@ sub run {
 
                     # Restart
                     my $files = join ', ', @$changes;
-                    print STDERR qq/File(s) "$files" modified, restarting\n/;
+                    print STDERR qq/File(s) "$files" modified, restarting\n\n/;
                     kill( 1, $parent );
                     exit;
                 }
             }
         }
     }
+    
+    our $GOT_HUP;
+    local $GOT_HUP = 0;
+    
+    local $SIG{HUP} = sub { $GOT_HUP = 1; };
+    local $SIG{CHLD} = 'IGNORE';
 
     # Handle requests
 
     # Setup socket
     $host = $host ? inet_aton($host) : INADDR_ANY;
-    socket( HTTPDaemon, PF_INET, SOCK_STREAM, getprotobyname('tcp') );
-    setsockopt( HTTPDaemon, SOL_SOCKET, SO_REUSEADDR, pack( "l", 1 ) );
-    bind( HTTPDaemon, sockaddr_in( $port, $host ) );
-    listen( HTTPDaemon, SOMAXCONN );
+    socket( HTTPDaemon, PF_INET, SOCK_STREAM, getprotobyname('tcp') )
+        || die "Couldn't assign TCP socket: $!";
+    setsockopt( HTTPDaemon, SOL_SOCKET, SO_REUSEADDR, pack( "l", 1 ) )
+        || die "Couldn't set TCP socket options: $!";
+    bind( HTTPDaemon, sockaddr_in( $port, $host ) )
+        || die "Couldn't bind socket to $port on $host: $!";
+    listen( HTTPDaemon, SOMAXCONN )
+       || die "Couldn't listen to socket on $port on $host: $!";
     my $url = 'http://';
     if ( $host eq INADDR_ANY ) {
         require Sys::Hostname;
@@ -267,7 +277,8 @@ sub run {
 
     if ($GOT_HUP) {
         $SIG{CHLD} = 'DEFAULT';
-        exec {$0}( ( ( -x $0 ) ? () : ($^X) ), $0, @ARGV );
+        wait;
+        exec {$0}( ( ( -x $0 ) ? () : ($^X) ), $0, @{ $options->{argv} } );
     }
 }
 
@@ -321,6 +332,7 @@ sub _index {
 
 sub _test {
     my $file = shift;
+    delete $INC{$file};
     local $SIG{__WARN__} = sub { };
     open my $olderr, '>&STDERR';
     open STDERR, '>', File::Spec->devnull;