about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-11-24 22:52:35 -0800
committerEric Wong <normalperson@yhbt.net>2009-11-24 22:59:07 -0800
commit2bc6e7a3c4e972ee3227d931e79bc4057ba278ca (patch)
treeaeb9b673dd2012e156f5e6f05b920b08865544dd /lib
parentcf504b527fa8ca2b612db1d7967a76536dc8347f (diff)
downloadrainbows-2bc6e7a3c4e972ee3227d931e79bc4057ba278ca.tar.gz
Due to the addition of keepalive_timeouts, it's safer to
pay a performance penalty and use a hash here instead.
Diffstat (limited to 'lib')
-rw-r--r--lib/rainbows/rev.rb3
-rw-r--r--lib/rainbows/rev/client.rb4
-rw-r--r--lib/rainbows/rev/core.rb2
-rw-r--r--lib/rainbows/rev/heartbeat.rb2
4 files changed, 7 insertions, 4 deletions
diff --git a/lib/rainbows/rev.rb b/lib/rainbows/rev.rb
index eed14f5..197d138 100644
--- a/lib/rainbows/rev.rb
+++ b/lib/rainbows/rev.rb
@@ -28,6 +28,9 @@ module Rainbows
     # keep-alive timeout scoreboard
     KATO = {}
 
+    # all connected clients
+    CONN = {}
+
     include Core
   end
 end
diff --git a/lib/rainbows/rev/client.rb b/lib/rainbows/rev/client.rb
index f7a9750..af56889 100644
--- a/lib/rainbows/rev/client.rb
+++ b/lib/rainbows/rev/client.rb
@@ -8,7 +8,7 @@ module Rainbows
       G = Rainbows::G
 
       def initialize(io)
-        G.cur += 1
+        CONN[self] = false
         super(io)
         post_init
         @deferred_bodies = [] # for (fast) regular files only
@@ -71,7 +71,7 @@ module Rainbows
       end
 
       def on_close
-        G.cur -= 1
+        CONN.delete(self)
       end
 
     end # module Client
diff --git a/lib/rainbows/rev/core.rb b/lib/rainbows/rev/core.rb
index 0460137..472182a 100644
--- a/lib/rainbows/rev/core.rb
+++ b/lib/rainbows/rev/core.rb
@@ -11,7 +11,7 @@ module Rainbows
       # CL and MAX will be defined in the corresponding worker loop
 
       def on_readable
-        return if G.cur >= MAX
+        return if CONN.size >= MAX
         begin
           CL.new(@_io.accept_nonblock).attach(LOOP)
         rescue Errno::EAGAIN, Errno::ECONNABORTED
diff --git a/lib/rainbows/rev/heartbeat.rb b/lib/rainbows/rev/heartbeat.rb
index ee9d1b5..54cc056 100644
--- a/lib/rainbows/rev/heartbeat.rb
+++ b/lib/rainbows/rev/heartbeat.rb
@@ -14,7 +14,7 @@ module Rainbows
           ot = Time.now - ot
           KATO.delete_if { |client, time| time < ot and client.timeout? }
         end
-        exit if (! G.tick && G.cur <= 0)
+        exit if (! G.tick && CONN.size <= 0)
       end
 
     end