diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-08-21 22:08:09 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-08-21 22:08:09 +0000 |
commit | 5eed0b9721ee3147ec7b39258a00ec99ccad81c2 (patch) | |
tree | 4b272a593f6954df3f928105bcc760f277820e6c /libjava/java/lang/ref/Reference.java | |
parent | 2472145e6963720d717cc7e15f88d2a5ef5a23c1 (diff) | |
download | ppe42-gcc-5eed0b9721ee3147ec7b39258a00ec99ccad81c2.tar.gz ppe42-gcc-5eed0b9721ee3147ec7b39258a00ec99ccad81c2.zip |
2003-08-21 David Daney <ddaney@avtrex.com>
Fix for PR libgcj/12013:
* java/lang/ref/natReference.cc (finalize_referred_to_object):
Check `cleared' field.
* java/lang/ref/Reference.java (copy): Updated comments.
(cleared): New field.
(clear): Rewrote.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70668 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/lang/ref/Reference.java')
-rw-r--r-- | libjava/java/lang/ref/Reference.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/libjava/java/lang/ref/Reference.java b/libjava/java/lang/ref/Reference.java index b02a4ed5775..3a2f91e8f16 100644 --- a/libjava/java/lang/ref/Reference.java +++ b/libjava/java/lang/ref/Reference.java @@ -1,5 +1,5 @@ /* java.lang.ref.Reference - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -83,15 +83,25 @@ public abstract class Reference /** * This is like REFERENT but is not scanned by the GC. We keep a - * copy around so that we can see when clear() has been called. + * copy around so that we can clean up our internal data structure + * even after clear() is called. * GCJ LOCAL: - * This field doesn't exist in Classpath; we use it to detect - * clearing. + * This field doesn't exist in Classpath. * END GCJ LOCAL */ gnu.gcj.RawData copy; /** + * Set to true if {@link #clear()} is called. + * GCJ LOCAL: + * This field doesn't exist in Classpath. It is used internally in + * natReference.cc, which enqueues the reference unless it is true + * (has been cleared). + * END GCJ LOCAL + */ + boolean cleared = false; + + /** * The queue this reference is registered on. This is null, if this * wasn't registered to any queue or reference was already enqueued. */ @@ -166,8 +176,7 @@ public abstract class Reference */ public void clear() { - referent = null; - copy = null; + cleared = true; } /** |