From f9de85b9a35c9f95b390249ea855858c5e4a3ae2 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 16 May 2011 20:05:12 +0000 Subject: more reliable shutdown for epoll concurrency models Just close the epoll descriptor, since the sleepy_penguin epoll_wait wrapper may not return EINTR in the future. --- lib/rainbows.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'lib/rainbows.rb') diff --git a/lib/rainbows.rb b/lib/rainbows.rb index 18c9b06..ff80c08 100644 --- a/lib/rainbows.rb +++ b/lib/rainbows.rb @@ -87,6 +87,11 @@ module Rainbows @cur = 0 @tick_mod = 0 @expire = nil + @at_quit = [] + + def self.at_quit(&block) + @at_quit << block + end def self.tick @tick_io.chmod(@tick_mod = 0 == @tick_mod ? 1 : 0) @@ -104,6 +109,7 @@ module Rainbows Rainbows::HttpParser.quit @expire = Time.now + (@server.timeout * 2.0) Unicorn::HttpServer::LISTENERS.each { |s| s.close rescue nil }.clear + @at_quit.each { |task| task.call } end false end -- cgit v1.2.3-24-ge0c7