diff options
author | Tom Tromey <tromey@redhat.com> | 2002-11-19 21:59:41 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2002-11-19 21:59:41 +0000 |
commit | da98b11a83c2d996b984bdb19d50d24b853ae120 (patch) | |
tree | 2aca38439a45060ae45c6484bdf8f4b238cde70d /libjava | |
parent | 93745862c47eb16f9935989a4299a080335d8309 (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | libjava/java/lang/ref/Reference.java | 4 | ||||
-rw-r--r-- | libjava/java/lang/ref/natReference.cc | 15 |
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); |