We close SELF_PIPE in the worker immediately, but signal handlers do not get setup immediately. So prevent workers from erroring out due to invalid SELF_PIPE. --- gem install --pre -v 4.8.1.1.g9b565 unicorn lib/unicorn/http_server.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/unicorn/http_server.rb b/lib/unicorn/http_server.rb index 2052d53..21cb9a1 100644 --- a/lib/unicorn/http_server.rb +++ b/lib/unicorn/http_server.rb @@ -120,6 +120,7 @@ class Unicorn::HttpServer # this pipe is used to wake us up from select(2) in #join when signals # are trapped. See trap_deferred. SELF_PIPE.replace(Unicorn.pipe) + @master_pid = $$ # setup signal handlers before writing pid file in case people get # trigger happy and send signals as soon as the pid file exists. @@ -133,7 +134,6 @@ class Unicorn::HttpServer # we upgrade and the upgrade breaks during preload_app==true && build_app! self.pid = config[:pid] - self.master_pid = $$ build_app! if preload_app bind_new_listeners! @@ -390,6 +390,7 @@ class Unicorn::HttpServer end def awaken_master + return if $$ != @master_pid SELF_PIPE[1].kgio_trywrite('.') # wakeup master process from select end -- 1.8.5.3.368.gab0bcec -- Eric Wong _______________________________________________ Unicorn mailing list - mongrel-unicorn@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-unicorn Do not quote signatures (like this one) or top post when replying