natReference.cc (add_to_hash): Look at `copy', not `referent'.
authorTom Tromey <tromey@redhat.com>
Tue, 19 Nov 2002 21:59:41 +0000 (21:59 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Tue, 19 Nov 2002 21:59:41 +0000 (21:59 +0000)
* 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

libjava/ChangeLog
libjava/java/lang/ref/Reference.java
libjava/java/lang/ref/natReference.cc

index 53c7523594d6c2fcf76c0e5d9002fe15ade2023a..addc3bdeb68b29c5fdd30752d2f632e27eb27145 100644 (file)
@@ -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
index b0fad39d91f396bb1fa5f69f458d326016a3c959..b02a4ed577550deb87577caa3bbb93d28f2f2c76 100644 (file)
@@ -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;
index 5743349caafc5b754ccd0f32eacfc48fa7c0301d..64262f900cbe59160322833b93b222ed47b90712 100644 (file)
@@ -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);