In Files

  • finalize.rb

Class/Module Index [+]

Quicksearch

Finalizer

Usage:

add dependency R_method(obj, dependant)

add(obj, dependant, method = :finalize, *opt)
add_dependency(obj, dependant, method = :finalize, *opt)

delete dependency R_method(obj, dependant)

delete(obj_or_id, dependant, method = :finalize)
delete_dependency(obj_or_id, dependant, method = :finalize)

delete dependency R_*(obj, dependant)

delete_all_dependency(obj_or_id, dependant)

delete dependency R_method(*, dependant)

delete_by_dependant(dependant, method = :finalize)

delete dependency R_*(*, dependant)

delete_all_by_dependant(dependant)

delete all dependency R_*(*, *)

delete_all

finalize the dependant connected by dependency R_method(obj, dependtant).

finalize(obj_or_id, dependant, method = :finalize)
finalize_dependency(obj_or_id, dependant, method = :finalize)

finalize all dependants connected by dependency R_*(obj, dependtant).

finalize_all_dependency(obj_or_id, dependant)

finalize the dependant connected by dependency R_method(*, dependtant).

finalize_by_dependant(dependant, method = :finalize)

finalize all dependants connected by dependency R_*(*, dependant).

finalize_all_by_dependant(dependant)

finalize all dependency registered to the Finalizer.

finalize_all

stop invoking Finalizer on GC.

safe{..}

Constants

RCS_ID

Public Class Methods

add(obj, dependant, method = :finalize, *opt) click to toggle source
Alias for: add_dependency
add_dependency(obj, dependant, method = :finalize, *opt) click to toggle source

add dependency R_method(obj, dependant)

 
               # File finalize.rb, line 58
def add_dependency(obj, dependant, method = :finalize, *opt)
  ObjectSpace.call_finalizer(obj)
  method = method.intern unless method.kind_of?(Integer)
  assoc = [dependant, method].concat(opt)
  if dep = @dependency[obj.object_id]
    dep.push assoc
  else
    @dependency[obj.object_id] = [assoc]
  end
end
            
Also aliased as: add
delete(id, dependant, method = :finalize) click to toggle source
Alias for: delete_dependency
delete_all_by_dependant(dependant) click to toggle source

delete dependency R_*(*, dependant)

 
               # File finalize.rb, line 106
def delete_all_by_dependant(dependant)
  for id in @dependency.keys
    delete_all_dependency(id, dependant)
  end
end
            
delete_all_dependency(id, dependant) click to toggle source

delete dependency R_*(obj, dependant)

 
               # File finalize.rb, line 85
def delete_all_dependency(id, dependant)
  id = id.object_id unless id.kind_of?(Integer)
  method = method.intern unless method.kind_of?(Integer)
  for assoc in @dependency[id]
    assoc.delete_if do
      |d, m, *o|
      d == dependant
    end
    @dependency.delete(id) if assoc.empty?
  end
end
            
delete_by_dependant(dependant, method = :finalize) click to toggle source

delete dependency R_method(*, dependant)

 
               # File finalize.rb, line 98
def delete_by_dependant(dependant, method = :finalize)
  method = method.intern unless method.kind_of?(Integer)
  for id in @dependency.keys
    delete(id, dependant, method)
  end
end
            
delete_dependency(id, dependant, method = :finalize) click to toggle source

delete dependency R_method(obj, dependant)

 
               # File finalize.rb, line 71
def delete_dependency(id, dependant, method = :finalize)
  id = id.object_id unless id.kind_of?(Integer)
  method = method.intern unless method.kind_of?(Integer)
  for assoc in @dependency[id]
    assoc.delete_if do
      |d, m, *o|
      d == dependant && m == method
    end
    @dependency.delete(id) if assoc.empty?
  end
end
            
Also aliased as: delete
finalize(id, dependant, method = :finalize) click to toggle source
Alias for: finalize_dependency
finalize_all() click to toggle source

finalize all dependants registered to the Finalizer.

 
               # File finalize.rb, line 156
def finalize_all
  for id, assocs in @dependency
    for dependant, method, *opt in assocs
      dependant.send(method, id, *opt)
    end
    assocs.clear
  end
end
            
finalize_all_by_dependant(dependant) click to toggle source

finalize all dependants connected by dependency R_*(*, dependtant)

 
               # File finalize.rb, line 149
def finalize_all_by_dependant(dependant)
  for id in @dependency.keys
    finalize_all_dependency(id, dependant)
  end
end
            
finalize_all_dependency(id, dependant) click to toggle source

finalize all dependants connected by dependency R_*(obj, dependtant)

 
               # File finalize.rb, line 128
def finalize_all_dependency(id, dependant)
  id = id.object_id unless id.kind_of?(Integer)
  method = method.intern unless method.kind_of?(Integer)
  for assoc in @dependency[id]
    assoc.delete_if do
      |d, m, *o|
      d.send(m, id, *o) if ret = d == dependant
    end
    @dependency.delete(id) if assoc.empty?
  end
end
            
finalize_by_dependant(dependant, method = :finalize) click to toggle source

finalize the dependant connected by dependency R_method(*, dependtant)

 
               # File finalize.rb, line 141
def finalize_by_dependant(dependant, method = :finalize)
  method = method.intern unless method.kind_of?(Integer)
  for id in @dependency.keys
    finalize(id, dependant, method)
  end
end
            
finalize_dependency(id, dependant, method = :finalize) click to toggle source

finalize the depandant connected by dependency R_method(obj, dependtant)

 
               # File finalize.rb, line 113
def finalize_dependency(id, dependant, method = :finalize)
  id = id.object_id unless id.kind_of?(Integer)
  method = method.intern unless method.kind_of?(Integer)
  for assocs in @dependency[id]
    assocs.delete_if do
      |d, m, *o|
      d.send(m, id, *o) if ret = d == dependant && m == method
      ret
    end
    @dependency.delete(id) if assoc.empty?
  end
end
            
Also aliased as: finalize
safe() click to toggle source

method to call finalize_* safely.

 
               # File finalize.rb, line 166
def safe
  old_status = Thread.critical
  Thread.critical = true
  ObjectSpace.remove_finalizer(@proc)
  begin
    yield
  ensure
    ObjectSpace.add_finalizer(@proc)
    Thread.critical = old_status
  end
end