natString.cc (unintern): Added `obj' argument.
authorTom Tromey <tromey@cygnus.com>
Wed, 12 Apr 2000 20:45:59 +0000 (20:45 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Wed, 12 Apr 2000 20:45:59 +0000 (20:45 +0000)
* java/lang/natString.cc (unintern): Added `obj' argument.
(intern): Register finalizer for string.
* java/lang/String.java (unintern): Now static; added obj
argument.

From-SVN: r33124

libjava/ChangeLog
libjava/java/lang/String.java
libjava/java/lang/natString.cc

index ebb56edf88733dc8bc0754f74569eccb498b94dd..19d074a5707df4ed13b5ce23e20025ebf0ec6701 100644 (file)
@@ -1,3 +1,10 @@
+2000-04-12  Tom Tromey  <tromey@cygnus.com>
+
+       * java/lang/natString.cc (unintern): Added `obj' argument.
+       (intern): Register finalizer for string.
+       * java/lang/String.java (unintern): Now static; added obj
+       argument.
+
 2000-04-11  Tom Tromey  <tromey@cygnus.com>
 
        * java/util/Vector.java (VectorEnumeration): Now `final'.
index 86388a61bfc6dc9c60cf17927f183f1ea50c1bd2..272f3e29a4dafe98d60ab33c11c05109dbbe12bb 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -302,6 +302,6 @@ public final class String
   private native void init (byte[] chars, int hibyte, int offset, int count);
   private native void init (byte[] chars, int offset, int count, String enc)
     throws UnsupportedEncodingException;
-  private native void unintern ();
+  private static native void unintern (Object obj);
   private static native void rehash ();
 }
index 3a39f238f49d1cd0b8f6dacfba1783fb0d87afe8..175d8eb5a1bea185213f534fd085395465217a95 100644 (file)
@@ -1,6 +1,6 @@
 // natString.cc - Implementation of java.lang.String native methods.
 
-/* Copyright (C) 1998, 1999  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -153,15 +153,18 @@ java::lang::String::intern()
   SET_STRING_IS_INTERNED(this);
   strhash_count++;
   *ptr = this;
+  // When string is GC'd, clear the slot in the hash table.
+  _Jv_RegisterFinalizer ((void *) this, unintern);
   return this;
 }
 
 /* Called by String fake finalizer. */
 void
-java::lang::String::unintern()
+java::lang::String::unintern (jobject obj)
 {
   JvSynchronize sync (&StringClass);
-  jstring* ptr = _Jv_StringGetSlot(this);
+  jstring str = reinterpret_cast<jstring> (obj);
+  jstring* ptr = _Jv_StringGetSlot(str);
   if (*ptr == NULL || *ptr == DELETED_STRING)
     return;
   *ptr = DELETED_STRING;