summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-10-10 07:01:12 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-10-10 07:01:12 +0000
commit9e188ea945df1caf19f5e7bd2af1513e90829e74 (patch)
treec49368d6148902f6491f3ce48bd7c97b5e286668 /lib
parent0e2a650fef699ab23aa9dfb3e15a4abc85a4736c (diff)
* eval.c (ruby_init): Init_stack() with local location.
(ruby-bugs-ja:PR#277) * gc.c (Init_stack): prefer address of argument rather than local variable to initialize rb_gc_stack_start. * lib/weakref.rb (WeakRef::@@final): use Hash#delete. * lib/weakref.rb (WeakRef::__getobj__): examin if alive or not by ID_REV_MAP to deal with recycled object. [ruby-dev:18472] * lib/weakref.rb (WeakRef::weakref_alive?): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/weakref.rb18
1 files changed, 7 insertions, 11 deletions
diff --git a/lib/weakref.rb b/lib/weakref.rb
index 6861fde5f5..2e2a55ebe6 100644
--- a/lib/weakref.rb
+++ b/lib/weakref.rb
@@ -25,15 +25,15 @@ class WeakRef<Delegator
rids = ID_MAP[id]
if rids
for rid in rids
- ID_REV_MAP[rid] = nil
+ ID_REV_MAP.delete(rid)
end
- ID_MAP[id] = nil
+ ID_MAP.delete(id)
end
rid = ID_REV_MAP[id]
if rid
- ID_REV_MAP[id] = nil
+ ID_REV_MAP.delete(id)
ID_MAP[rid].delete(id)
- ID_MAP[rid] = nil if ID_MAP[rid].empty?
+ ID_MAP.delete(rid) if ID_MAP[rid].empty?
end
ensure
Thread.critical = __old_status
@@ -53,11 +53,11 @@ class WeakRef<Delegator
Thread.critical = __old_status
end
ID_MAP[@__id].push self.__id__
- ID_REV_MAP[self.id] = @__id
+ ID_REV_MAP[self.__id__] = @__id
end
def __getobj__
- unless ID_MAP[@__id]
+ unless ID_REV_MAP[self.__id__] == @__id
raise RefError, "Illegal Reference - probably recycled", caller(2)
end
begin
@@ -68,11 +68,7 @@ class WeakRef<Delegator
end
def weakref_alive?
- if ID_MAP[@__id]
- true
- else
- false
- end
+ ID_REV_MAP[self.__id__] == @__id
end
end