From: Tom Tromey Date: Wed, 12 Apr 2000 20:45:59 +0000 (+0000) Subject: natString.cc (unintern): Added `obj' argument. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=50b99cc8fe032c1631c99f9f1ccda990d717d63b;p=gcc.git 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 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index ebb56edf887..19d074a5707 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2000-04-12 Tom Tromey + + * 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 * java/util/Vector.java (VectorEnumeration): Now `final'. diff --git a/libjava/java/lang/String.java b/libjava/java/lang/String.java index 86388a61bfc..272f3e29a4d 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 3a39f238f49..175d8eb5a1b 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 (obj); + jstring* ptr = _Jv_StringGetSlot(str); if (*ptr == NULL || *ptr == DELETED_STRING) return; *ptr = DELETED_STRING;