Module | Finalizer |
In: |
lib/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{..}
RCS_ID | = | '-$Id: finalize.rb,v 1.4 1998/02/27 05:34:33 keiju Exp keiju $-' |
add_dependency | -> | add |
delete_dependency | -> | delete |
finalize_dependency | -> | finalize |
add dependency R_method(obj, dependant)
# File lib/finalize.rb, line 58 58: def add_dependency(obj, dependant, method = :finalize, *opt) 59: ObjectSpace.call_finalizer(obj) 60: method = method.intern unless method.kind_of?(Integer) 61: assoc = [dependant, method].concat(opt) 62: if dep = @dependency[obj.object_id] 63: dep.push assoc 64: else 65: @dependency[obj.object_id] = [assoc] 66: end 67: end
delete dependency R_*(*, dependant)
# File lib/finalize.rb, line 106 106: def delete_all_by_dependant(dependant) 107: for id in @dependency.keys 108: delete_all_dependency(id, dependant) 109: end 110: end
delete dependency R_*(obj, dependant)
# File lib/finalize.rb, line 85 85: def delete_all_dependency(id, dependant) 86: id = id.object_id unless id.kind_of?(Integer) 87: method = method.intern unless method.kind_of?(Integer) 88: for assoc in @dependency[id] 89: assoc.delete_if do 90: |d, m, *o| 91: d == dependant 92: end 93: @dependency.delete(id) if assoc.empty? 94: end 95: end
delete dependency R_method(*, dependant)
# File lib/finalize.rb, line 98 98: def delete_by_dependant(dependant, method = :finalize) 99: method = method.intern unless method.kind_of?(Integer) 100: for id in @dependency.keys 101: delete(id, dependant, method) 102: end 103: end
delete dependency R_method(obj, dependant)
# File lib/finalize.rb, line 71 71: def delete_dependency(id, dependant, method = :finalize) 72: id = id.object_id unless id.kind_of?(Integer) 73: method = method.intern unless method.kind_of?(Integer) 74: for assoc in @dependency[id] 75: assoc.delete_if do 76: |d, m, *o| 77: d == dependant && m == method 78: end 79: @dependency.delete(id) if assoc.empty? 80: end 81: end
finalize all dependants connected by dependency R_*(*, dependtant)
# File lib/finalize.rb, line 149 149: def finalize_all_by_dependant(dependant) 150: for id in @dependency.keys 151: finalize_all_dependency(id, dependant) 152: end 153: end
finalize all dependants connected by dependency R_*(obj, dependtant)
# File lib/finalize.rb, line 128 128: def finalize_all_dependency(id, dependant) 129: id = id.object_id unless id.kind_of?(Integer) 130: method = method.intern unless method.kind_of?(Integer) 131: for assoc in @dependency[id] 132: assoc.delete_if do 133: |d, m, *o| 134: d.send(m, id, *o) if ret = d == dependant 135: end 136: @dependency.delete(id) if assoc.empty? 137: end 138: end
finalize the dependant connected by dependency R_method(*, dependtant)
# File lib/finalize.rb, line 141 141: def finalize_by_dependant(dependant, method = :finalize) 142: method = method.intern unless method.kind_of?(Integer) 143: for id in @dependency.keys 144: finalize(id, dependant, method) 145: end 146: end
finalize the depandant connected by dependency R_method(obj, dependtant)
# File lib/finalize.rb, line 113 113: def finalize_dependency(id, dependant, method = :finalize) 114: id = id.object_id unless id.kind_of?(Integer) 115: method = method.intern unless method.kind_of?(Integer) 116: for assocs in @dependency[id] 117: assocs.delete_if do 118: |d, m, *o| 119: d.send(m, id, *o) if ret = d == dependant && m == method 120: ret 121: end 122: @dependency.delete(id) if assoc.empty? 123: end 124: end
method to call finalize_* safely.
# File lib/finalize.rb, line 166 166: def safe 167: old_status = Thread.critical 168: Thread.critical = true 169: ObjectSpace.remove_finalizer(@proc) 170: begin 171: yield 172: ensure 173: ObjectSpace.add_finalizer(@proc) 174: Thread.critical = old_status 175: end 176: end
registering function to ObjectSpace#add_finalizer
# File lib/finalize.rb, line 181 181: def final_of(id) 182: if assocs = @dependency.delete(id) 183: for dependant, method, *opt in assocs 184: dependant.send(method, id, *opt) 185: end 186: end 187: end