Extended maintenance of Ruby versions 1.8.7 and 1.9.2 will end on July 31, 2014. Read more

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 Instance Methods

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
            
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
            
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
            
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
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus