diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-01-21 13:21:07 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-01-21 16:54:02 -0800 |
commit | 247ce76b4aabfa42157b9cbf9ebae824819cfff6 (patch) | |
tree | b3c61036f7befb1d9cb697193dc8a629ac362fe7 /lib/rainbows/epoll/server.rb | |
parent | b33ab73a984660ab2d741b32725ab21d7860bef3 (diff) | |
download | rainbows-247ce76b4aabfa42157b9cbf9ebae824819cfff6.tar.gz |
We can eliminate the State module to simplify our code since 1.3.x keeps better track of things.
Diffstat (limited to 'lib/rainbows/epoll/server.rb')
-rw-r--r-- | lib/rainbows/epoll/server.rb | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/lib/rainbows/epoll/server.rb b/lib/rainbows/epoll/server.rb index 1f61662..53b87ab 100644 --- a/lib/rainbows/epoll/server.rb +++ b/lib/rainbows/epoll/server.rb @@ -5,16 +5,12 @@ module Rainbows::Epoll::Server @@nr = 0 MAX = Rainbows.server.worker_connections THRESH = MAX - 1 - include Rainbows::Epoll::State LISTENERS = Rainbows::HttpServer::LISTENERS ReRun = [] - - def self.extended(obj) - obj.instance_variable_set(:@epoll_active, false) - end + EP = Rainbows::Epoll::EP def self.run - LISTENERS.each { |sock| sock.extend(self).epoll_enable(IN) } + LISTENERS.each { |sock| EP.add(sock.extend(self), IN) } begin EP.wait(nil, 1000) { |_, obj| obj.epoll_run } while obj = ReRun.shift @@ -28,16 +24,16 @@ module Rainbows::Epoll::Server # rearms all listeners when there's a free slot def self.decr - THRESH == (@@nr -= 1) and LISTENERS.each { |sock| sock.epoll_enable(IN) } + THRESH == (@@nr -= 1) and LISTENERS.each { |sock| EP.set(sock, IN) } end def epoll_run - return epoll_disable if @@nr >= MAX + return EP.delete(self) if @@nr >= MAX while io = kgio_tryaccept @@nr += 1 # there's a chance the client never even sees epoll for simple apps io.epoll_once - return epoll_disable if @@nr >= MAX + return EP.delete(self) if @@nr >= MAX end end end |