diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-07 07:38:25 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-07 07:38:25 +0000 |
commit | 9ff1e787f915539b1980654e3d3d2013ff5c81d2 (patch) | |
tree | 8d0fc9ca5b4dbfa9885dc56862292d55091bcaac /ruby_1_8_6/lib/drb/timeridconv.rb | |
parent | 441546edcfbb1b346c87b69c5f578d1a0e522e06 (diff) |
wrong commit; sorryv1_8_6_269
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_6_269@17938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_1_8_6/lib/drb/timeridconv.rb')
-rw-r--r-- | ruby_1_8_6/lib/drb/timeridconv.rb | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/ruby_1_8_6/lib/drb/timeridconv.rb b/ruby_1_8_6/lib/drb/timeridconv.rb deleted file mode 100644 index bb2c48d528..0000000000 --- a/ruby_1_8_6/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) |