aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2002-11-19 21:59:41 +0000
committerTom Tromey <tromey@gcc.gnu.org>2002-11-19 21:59:41 +0000
commitda98b11a83c2d996b984bdb19d50d24b853ae120 (patch)
tree2aca38439a45060ae45c6484bdf8f4b238cde70d /libjava
parent93745862c47eb16f9935989a4299a080335d8309 (diff)
downloadgcc-da98b11a83c2d996b984bdb19d50d24b853ae120.zip
gcc-da98b11a83c2d996b984bdb19d50d24b853ae120.tar.gz
gcc-da98b11a83c2d996b984bdb19d50d24b853ae120.tar.bz2
natReference.cc (add_to_hash): Look at `copy', not `referent'.
* java/lang/ref/natReference.cc (add_to_hash): Look at `copy', not `referent'. (finalize_referred_to_object): Don't modify `referent' or `copy' fields. (add_to_hash): Correctly set `n->next' when updating list. * java/lang/ref/Reference.java (enqueue): Return false if already enqueued. From-SVN: r59278
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog10
-rw-r--r--libjava/java/lang/ref/Reference.java4
-rw-r--r--libjava/java/lang/ref/natReference.cc15
3 files changed, 17 insertions, 12 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 53c7523..addc3bd 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,13 @@
+2002-11-19 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/ref/natReference.cc (add_to_hash): Look at `copy', not
+ `referent'.
+ (finalize_referred_to_object): Don't modify `referent' or `copy'
+ fields.
+ (add_to_hash): Correctly set `n->next' when updating list.
+ * java/lang/ref/Reference.java (enqueue): Return false if already
+ enqueued.
+
2002-11-19 Ranjit Mathew <rmathew@hotmail.com>
* include/jni.h: Add missing JNICALL and JNIEXPORT attributes
diff --git a/libjava/java/lang/ref/Reference.java b/libjava/java/lang/ref/Reference.java
index b0fad39..b02a4ed 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 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -185,7 +185,7 @@ public abstract class Reference
*/
public boolean enqueue()
{
- if (queue != null)
+ if (queue != null && nextOnQueue == null)
{
queue.enqueue(this);
queue = null;
diff --git a/libjava/java/lang/ref/natReference.cc b/libjava/java/lang/ref/natReference.cc
index 5743349..64262f9 100644
--- a/libjava/java/lang/ref/natReference.cc
+++ b/libjava/java/lang/ref/natReference.cc
@@ -1,6 +1,6 @@
// natReference.cc - Native code for References
-/* Copyright (C) 2001 Free Software Foundation
+/* Copyright (C) 2001, 2002 Free Software Foundation
This file is part of libgcj.
@@ -165,7 +165,8 @@ add_to_hash (java::lang::ref::Reference *the_reference)
if (3 * hash_count >= 2 * hash_size)
rehash ();
- jobject referent = the_reference->referent;
+ // Use `copy' here because the `referent' field has been cleared.
+ jobject referent = the_reference->copy;
object_list *item = find_slot (referent);
if (item->reference == NULL)
{
@@ -197,7 +198,7 @@ add_to_hash (java::lang::ref::Reference *the_reference)
link = &iter->next;
iter = *link;
}
- n->next = (*link) ? (*link)->next : NULL;
+ n->next = *link;
*link = n;
}
@@ -249,13 +250,7 @@ finalize_referred_to_object (jobject obj)
// If the copy is already NULL then the user must have
// called Reference.clear().
if (ref->copy != NULL)
- {
- if (w == PHANTOM)
- ref->referent = ref->copy;
- else
- ref->copy = NULL;
- ref->enqueue ();
- }
+ ref->enqueue ();
object_list *next = head->next;
_Jv_Free (head);