Module Finalizer
In: finalize.rb

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{..}

Methods

Constants

RCS_ID = '-$Id: finalize.rb,v 1.4 1998/02/27 05:34:33 keiju Exp keiju $-'

External Aliases

add_dependency -> add
delete_dependency -> delete
finalize_dependency -> finalize

Public Class methods

add dependency R_method(obj, dependant)

[Source]

# 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 dependency R_*(*, dependant)

[Source]

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

delete dependency R_*(obj, dependant)

[Source]

# 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 dependency R_method(*, dependant)

[Source]

# 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 R_method(obj, dependant)

[Source]

# 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 dependants registered to the Finalizer.

[Source]

# 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 dependants connected by dependency R_*(*, dependtant)

[Source]

# 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 dependants connected by dependency R_*(obj, dependtant)

[Source]

# 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 the dependant connected by dependency R_method(*, dependtant)

[Source]

# 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 the depandant connected by dependency R_method(obj, dependtant)

[Source]

# 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

method to call finalize_* safely.

[Source]

# 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

[Validate]

ruby-doc.org is a community service provided by James Britt and Happy Camper Studios, a Phoenix, Arizona, Ruby application development company.

Documentation content on ruby-doc.org is provided by remarkable members of the Ruby community.

For more information on the Ruby programming language, visit ruby-lang.org.

Want to help improve Ruby's API docs? See Ruby Documentation Guidelines.