diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:13:14 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:13:14 +0000 |
commit | d0233291bc8a5068e52c69c210e5979e5324b5bc (patch) | |
tree | 7d9459449c33792c63eeb7baa071e76352e0baab /trunk/lib/drb/timeridconv.rb | |
parent | 0dc342de848a642ecce8db697b8fecd83a63e117 (diff) | |
parent | 72eaacaa15256ab95c3b52ea386f88586fb9da40 (diff) |
re-adding tag v1_9_0_4 as an alias of trunk@18848v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/lib/drb/timeridconv.rb')
-rw-r--r-- | trunk/lib/drb/timeridconv.rb | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/trunk/lib/drb/timeridconv.rb b/trunk/lib/drb/timeridconv.rb deleted file mode 100644 index bb2c48d528..0000000000 --- a/trunk/lib/drb/timeridconv.rb +++ /dev/null @@ -1,91 +0,0 @@ -require 'drb/drb' -require 'monitor' - -module DRb - class TimerIdConv < DRbIdConv - class TimerHolder2 - include MonitorMixin - - class InvalidIndexError < RuntimeError; end - - def initialize(timeout=600) - super() - @sentinel = Object.new - @gc = {} - @curr = {} - @renew = {} - @timeout = timeout - @keeper = keeper - end - - def add(obj) - synchronize do - key = obj.__id__ - @curr[key] = obj - return key - end - end - - def fetch(key, dv=@sentinel) - synchronize do - obj = peek(key) - if obj == @sentinel - return dv unless dv == @sentinel - raise InvalidIndexError - end - @renew[key] = obj # KeepIt - return obj - end - end - - def include?(key) - synchronize do - obj = peek(key) - return false if obj == @sentinel - true - end - end - - def peek(key) - synchronize do - return @curr.fetch(key, @renew.fetch(key, @gc.fetch(key, @sentinel))) - end - end - - private - def alternate - synchronize do - @gc = @curr # GCed - @curr = @renew - @renew = {} - end - end - - def keeper - Thread.new do - loop do - size = alternate - sleep(@timeout) - end - end - end - end - - def initialize(timeout=600) - @holder = TimerHolder2.new(timeout) - end - - def to_obj(ref) - return super if ref.nil? - @holder.fetch(ref) - rescue TimerHolder2::InvalidIndexError - raise "invalid reference" - end - - def to_id(obj) - return @holder.add(obj) - end - end -end - -# DRb.install_id_conv(TimerIdConv.new) |