diff options
author | Eric Wong <normalperson@yhbt.net> | 2009-11-06 19:45:17 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2009-11-06 19:45:17 -0800 |
commit | 1a9a718a3f9a5b582a4a339a9bb9249c2ca392d7 (patch) | |
tree | 0c95f2d8fc4de8542f7716832800614e1e7a8872 /lib/rainbows.rb | |
parent | e1dcadef6ca242e36e99aab19e3e040bf01070f9 (diff) | |
download | rainbows-1a9a718a3f9a5b582a4a339a9bb9249c2ca392d7.tar.gz |
It turns out neither the EventMachine and Rev classes checked for master death in its heartbeat mechanism. Since we managed to forget the same thing twice, we now have a test case for it and also centralized the code to remove duplication.
Diffstat (limited to 'lib/rainbows.rb')
-rw-r--r-- | lib/rainbows.rb | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/rainbows.rb b/lib/rainbows.rb index a8985c6..5bd8693 100644 --- a/lib/rainbows.rb +++ b/lib/rainbows.rb @@ -5,9 +5,20 @@ module Rainbows # global vars because class/instance variables are confusing me :< # this struct is only accessed inside workers and thus private to each - G = Struct.new(:cur, :max, :logger, :alive, :app).new # G.cur may not be used the network concurrency model - G.alive = true + class State < Struct.new(:alive,:m,:cur,:server,:tmp) + def tick + tmp.chmod(self.m = m == 0 ? 1 : 0) + alive && server.master_pid == Process.ppid or quit! + end + + def quit! + self.alive = false + server.class.const_get(:LISTENERS).map! { |s| s.close rescue nil } + false + end + end + G = State.new(true, 0, 0) require 'rainbows/const' require 'rainbows/http_server' |