From 5eed0b9721ee3147ec7b39258a00ec99ccad81c2 Mon Sep 17 00:00:00 2001 From: tromey Date: Thu, 21 Aug 2003 22:08:09 +0000 Subject: 2003-08-21 David Daney 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 --- libjava/java/lang/ref/Reference.java | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'libjava/java/lang/ref/Reference.java') 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,14 +83,24 @@ 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; } /** -- cgit v1.2.3