From e0c33c583c5b4d2a4661edb6c41d6a60b44dae9d Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 17 Oct 2009 22:42:55 -0700 Subject: Fix graceful shutdown handling of Thread* models harder I need better tests for graceful shutdown... --- lib/rainbows/base.rb | 1 + lib/rainbows/thread_pool.rb | 4 ++-- lib/rainbows/thread_spawn.rb | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/rainbows/base.rb b/lib/rainbows/base.rb index f24de31..3f9db96 100644 --- a/lib/rainbows/base.rb +++ b/lib/rainbows/base.rb @@ -19,6 +19,7 @@ module Rainbows # TODO: migrate into Unicorn::HttpServer def listen_loop_error(e) + return if HttpServer::LISTENERS.first.nil? || IOError === e logger.error "Unhandled listen loop exception #{e.inspect}." logger.error e.backtrace.join("\n") end diff --git a/lib/rainbows/thread_pool.rb b/lib/rainbows/thread_pool.rb index d7f0b14..2bae89b 100644 --- a/lib/rainbows/thread_pool.rb +++ b/lib/rainbows/thread_pool.rb @@ -55,10 +55,10 @@ module Rainbows rescue Errno::EINTR next rescue Errno::EBADF, TypeError - return + break end rescue Object => e - listen_loop_error(e) if LISTENERS.first + listen_loop_error(e) end while ! Thread.current[:quit] && LISTENERS.first } end diff --git a/lib/rainbows/thread_spawn.rb b/lib/rainbows/thread_spawn.rb index d002c81..fb9ea57 100644 --- a/lib/rainbows/thread_spawn.rb +++ b/lib/rainbows/thread_spawn.rb @@ -55,7 +55,7 @@ module Rainbows end end rescue Object => e - listen_loop_error(e) if LISTENERS.first + listen_loop_error(e) end while LISTENERS.first && master_pid == Process.ppid join_threads(threads.list, worker) end -- cgit v1.2.3-24-ge0c7