Server IP : 198.54.121.189 / Your IP : 216.73.216.140
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Upload Files :
Command :
Current File : /opt/alt/ruby26/lib64/ruby/2.6.0/drb//timeridconv.rb
# frozen_string_literal: false
require_relative '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 = nil
end
def add(obj)
synchronize do
rotate
key = obj.__id__
@renew[key] = obj
invoke_keeper
return key
end
end
def fetch(key)
synchronize do
rotate
obj = peek(key)
raise InvalidIndexError if obj == @sentinel
@renew[key] = obj # KeepIt
return obj
end
end
private
def peek(key)
return @renew.fetch(key) { @gc.fetch(key, @sentinel) }
end
def invoke_keeper
return if @expires
@expires = Time.now + @keeping
on_gc
end
def on_gc
return unless Thread.main.alive?
return if @expires.nil?
Thread.new { rotate } if @expires < Time.now
ObjectSpace.define_finalizer(Object.new) {on_gc}
end
def rotate
synchronize do
if @expires &.< Time.now
@gc = @renew # GCed
@renew = {}
@expires = @gc.empty? ? nil : Time.now + @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)
Name |
Size |
Last Modified |
Owner / Group |
Permissions |
Options |
.. | -- | March 03 2024 22:47:39 | root / root | 0755 | |
| | | | | |
acl.rb | 4.61 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
drb.rb | 56.913 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
eq.rb | 0.269 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
extserv.rb | 0.816 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
extservm.rb | 1.745 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
gw.rb | 3.005 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
invokemethod.rb | 0.759 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
observer.rb | 0.651 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
ssl.rb | 11.573 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
timeridconv.rb | 2.161 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |
unix.rb | 2.799 KB | April 12 2022 11:50:11 | root / linksafe | 0644 | |