diff options
author | Tom Tromey <tromey@cygnus.com> | 2000-04-12 20:45:59 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2000-04-12 20:45:59 +0000 |
commit | 50b99cc8fe032c1631c99f9f1ccda990d717d63b (patch) | |
tree | 2ac625d7c625346436407d047780b41336a326c8 /libjava/java | |
parent | 07385c4994a45ba1781fb91e0585da3a0628e14d (diff) | |
download | gcc-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.java | 4 | ||||
-rw-r--r-- | libjava/java/lang/natString.cc | 9 |
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; |