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/epoll.rb | 1 + lib/rainbows/xepoll.rb | 1 + lib/rainbows/xepoll_thread_pool/client.rb | 1 + lib/rainbows/xepoll_thread_spawn/client.rb | 1 + 4 files changed, 4 insertions(+) (limited to 'lib/rainbows') diff --git a/lib/rainbows/epoll.rb b/lib/rainbows/epoll.rb index 8f3d020..3a23d51 100644 --- a/lib/rainbows/epoll.rb +++ b/lib/rainbows/epoll.rb @@ -46,6 +46,7 @@ module Rainbows::Epoll def init_worker_process(worker) super Rainbows::Epoll.const_set :EP, SleepyPenguin::Epoll.new + Rainbows.at_quit { Rainbows::Epoll::EP.close } Rainbows::Client.__send__ :include, Client end diff --git a/lib/rainbows/xepoll.rb b/lib/rainbows/xepoll.rb index 2b38900..ef7ea05 100644 --- a/lib/rainbows/xepoll.rb +++ b/lib/rainbows/xepoll.rb @@ -14,6 +14,7 @@ module Rainbows::XEpoll def init_worker_process(worker) super Rainbows::Epoll.const_set :EP, SleepyPenguin::Epoll.new + Rainbows.at_quit { Rainbows::Epoll::EP.close } Rainbows::Client.__send__ :include, Client end diff --git a/lib/rainbows/xepoll_thread_pool/client.rb b/lib/rainbows/xepoll_thread_pool/client.rb index f871e56..b33998d 100644 --- a/lib/rainbows/xepoll_thread_pool/client.rb +++ b/lib/rainbows/xepoll_thread_pool/client.rb @@ -37,6 +37,7 @@ module Rainbows::XEpollThreadPool::Client ep = SleepyPenguin::Epoll EP = ep.new + Rainbows.at_quit { EP.close } IN = ep::IN | ep::ET | ep::ONESHOT KATO = {} KATO.compare_by_identity if KATO.respond_to?(:compare_by_identity) diff --git a/lib/rainbows/xepoll_thread_spawn/client.rb b/lib/rainbows/xepoll_thread_spawn/client.rb index f8fc191..2ab64d2 100644 --- a/lib/rainbows/xepoll_thread_spawn/client.rb +++ b/lib/rainbows/xepoll_thread_spawn/client.rb @@ -26,6 +26,7 @@ module Rainbows::XEpollThreadSpawn::Client ep = SleepyPenguin::Epoll EP = ep.new + Rainbows.at_quit { EP.close } IN = ep::IN | ep::ET | ep::ONESHOT KATO = {} KATO.compare_by_identity if KATO.respond_to?(:compare_by_identity) -- cgit v1.2.3-24-ge0c7