summaryrefslogtreecommitdiff
path: root/ruby_2_2/lib/drb/timeridconv.rb
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-14 15:59:18 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-14 15:59:18 +0000
commit72113d58cd2fc62b3f4ef3d2eb6cec37393532a4 (patch)
tree534843caaea28f1171378c1ac5bea0184ed04054 /ruby_2_2/lib/drb/timeridconv.rb
parent1a74fa4b04da04bd2bb33103dd3cf431438df38e (diff)
parent02b8978ff10b05304dbb46d73b49a2cf3a87cb92 (diff)
add tag v2_2_9v2_2_9
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v2_2_9@61259 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_2_2/lib/drb/timeridconv.rb')
-rw-r--r--ruby_2_2/lib/drb/timeridconv.rb95
1 files changed, 0 insertions, 95 deletions
diff --git a/ruby_2_2/lib/drb/timeridconv.rb b/ruby_2_2/lib/drb/timeridconv.rb
deleted file mode 100644
index 423b4563fa..0000000000
--- a/ruby_2_2/lib/drb/timeridconv.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-require 'drb/drb'
-require 'monitor'
-
-module DRb
-
- # Timer id conversion keeps objects alive for a certain amount of time after
- # their last access. The default time period is 600 seconds and can be
- # changed upon initialization.
- #
- # To use TimerIdConv:
- #
- # DRb.install_id_conv TimerIdConv.new 60 # one minute
-
- class TimerIdConv < DRbIdConv
- class TimerHolder2 # :nodoc:
- include MonitorMixin
-
- class InvalidIndexError < RuntimeError; end
-
- def initialize(keeping=600)
- super()
- @sentinel = Object.new
- @gc = {}
- @renew = {}
- @keeping = keeping
- @expires = Time.now + @keeping
- end
-
- def add(obj)
- synchronize do
- rotate
- key = obj.__id__
- @renew[key] = obj
- return key
- end
- end
-
- def fetch(key, dv=@sentinel)
- synchronize do
- rotate
- obj = peek(key)
- if obj == @sentinel
- return dv unless dv == @sentinel
- raise InvalidIndexError
- end
- @renew[key] = obj # KeepIt
- return obj
- end
- end
-
- private
- def peek(key)
- synchronize do
- return @renew.fetch(key) { @gc.fetch(key, @sentinel) }
- end
- end
-
- def rotate
- synchronize do
- return if @expires > Time.now
- @gc = @renew # GCed
- @renew = {}
- @expires = Time.now + @keeping
- end
- end
-
- def keeper
- Thread.new do
- loop do
- rotate
- sleep(@keeping)
- end
- end
- end
- end
-
- # Creates a new TimerIdConv which will hold objects for +keeping+ seconds.
- def initialize(keeping=600)
- @holder = TimerHolder2.new(keeping)
- end
-
- def to_obj(ref) # :nodoc:
- return super if ref.nil?
- @holder.fetch(ref)
- rescue TimerHolder2::InvalidIndexError
- raise "invalid reference"
- end
-
- def to_id(obj) # :nodoc:
- return @holder.add(obj)
- end
- end
-end
-
-# DRb.install_id_conv(TimerIdConv.new)