X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FHTTP.pm;h=332e771aaacbd4733612af99cd952b6090d70dd9;hb=5d1266aecbc3b839f0b904093ccf282a73e06c91;hp=77bb79847273841c48d2a9008edf7ba0c19a5c41;hpb=7a1df40307d6825f3daac351c330fbd235cf9a47;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/HTTP.pm b/lib/Catalyst/Engine/HTTP.pm index 77bb798..332e771 100644 --- a/lib/Catalyst/Engine/HTTP.pm +++ b/lib/Catalyst/Engine/HTTP.pm @@ -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;