aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>2000-04-12 20:45:59 +0000
committerTom Tromey <tromey@gcc.gnu.org>2000-04-12 20:45:59 +0000
commit50b99cc8fe032c1631c99f9f1ccda990d717d63b (patch)
tree2ac625d7c625346436407d047780b41336a326c8 /libjava/java
parent07385c4994a45ba1781fb91e0585da3a0628e14d (diff)
downloadgcc-50b99cc8fe032c1631c99f9f1ccda990d717d63b.zip
gcc-50b99cc8fe032c1631c99f9f1ccda990d717d63b.tar.gz
gcc-50b99cc8fe032c1631c99f9f1ccda990d717d63b.tar.bz2
natString.cc (unintern): Added `obj' argument.
* 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
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/lang/String.java4
-rw-r--r--libjava/java/lang/natString.cc9
2 files changed, 8 insertions, 5 deletions
diff --git a/libjava/java/lang/String.java b/libjava/java/lang/String.java
index 86388a6..272f3e2 100644
--- a/libjava/java/lang/String.java
+++ b/libjava/java/lang/String.java
@@ -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 ();
}
diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc
index 3a39f23..175d8eb 100644
--- a/libjava/java/lang/natString.cc
+++ b/libjava/java/lang/natString.cc
@@ -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;