From dfbb304217d1aa6beb6711e11a05b2b32676ebbc Mon Sep 17 00:00:00 2001 From: tromey Date: Tue, 19 Nov 2002 21:59:41 +0000 Subject: * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@59278 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/java/lang/ref/natReference.cc | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'libjava/java/lang/ref/natReference.cc') diff --git a/libjava/java/lang/ref/natReference.cc b/libjava/java/lang/ref/natReference.cc index 5743349caaf..64262f900cb 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); -- cgit v1.2.3