X7ROOT File Manager
Current Path:
/opt/alt/ruby25/lib64/ruby/2.5.0/drb
opt
/
alt
/
ruby25
/
lib64
/
ruby
/
2.5.0
/
drb
/
??
..
??
acl.rb
(4.61 KB)
??
drb.rb
(56.62 KB)
??
eq.rb
(275 B)
??
extserv.rb
(831 B)
??
extservm.rb
(1.75 KB)
??
gw.rb
(3 KB)
??
invokemethod.rb
(777 B)
??
observer.rb
(667 B)
??
ssl.rb
(11.56 KB)
??
timeridconv.rb
(2.16 KB)
??
unix.rb
(2.75 KB)
Editing: timeridconv.rb
# frozen_string_literal: false 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 = 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)
Upload File
Create Folder