diff options
author | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-28 18:53:06 +0000 |
---|---|---|
committer | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-28 18:53:06 +0000 |
commit | 7814c20f47832b56ad105fa73db89894bf0d9cf9 (patch) | |
tree | a45dca3a962b2788d50822d0c51a8159a48662d5 /libjava | |
parent | 383051ad981ca5ce88fdab1eb2b434290177b9b4 (diff) | |
download | gcc-7814c20f47832b56ad105fa73db89894bf0d9cf9.tar.gz |
* gcj.texi (Object allocation): Remove _Jv_AllocBytes.
(Mixing with C++): Document JvAllocBytes and RawDataManaged.
* gcj/cni.h (JvAllocBytes): New public CNI function. Calls
_Jv_AllocBytes.
* gnu/gcj/RawDataManaged.java: New file.
* java/lang/Thread.java (data): Declare as RawDataManaged.
* java/lang/natThread.cc (init_native): Cast natThread data to
RawDataManaged, not jobject.
* Makefile.am (ordinary_java_source_files): Add RawDataManaged.
* Makefile.in: Rebuilt.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82372 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 11 | ||||
-rw-r--r-- | libjava/Makefile.am | 1 | ||||
-rw-r--r-- | libjava/Makefile.in | 4 | ||||
-rw-r--r-- | libjava/gcj/cni.h | 7 | ||||
-rw-r--r-- | libjava/gnu/gcj/RawDataManaged.java | 23 | ||||
-rw-r--r-- | libjava/java/lang/Thread.java | 3 | ||||
-rw-r--r-- | libjava/java/lang/natThread.cc | 7 |
7 files changed, 49 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index a4124d49e0a..e6270fe86a5 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,14 @@ +2004-05-28 Bryce McKinlay <mckinlay@redhat.com> + + * gcj/cni.h (JvAllocBytes): New public CNI function. Calls + _Jv_AllocBytes. + * gnu/gcj/RawDataManaged.java: New file. + * java/lang/Thread.java (data): Declare as RawDataManaged. + * java/lang/natThread.cc (init_native): Cast natThread data to + RawDataManaged, not jobject. + * Makefile.am (ordinary_java_source_files): Add RawDataManaged. + * Makefile.in: Rebuilt. + 2004-05-27 Jerry Quinn <jlquinn@optonline.net> * java/util/SimpleTimeZone.java: Reverting my last change until I diff --git a/libjava/Makefile.am b/libjava/Makefile.am index e8fac90557d..5a97d9b886f 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -2251,6 +2251,7 @@ gnu/classpath/ServiceFactory.java \ gnu/classpath/ServiceProviderLoadingAction.java \ gnu/gcj/Core.java \ gnu/gcj/RawData.java \ +gnu/gcj/RawDataManaged.java \ gnu/gcj/io/DefaultMimeTypes.java \ gnu/gcj/io/MimeTypes.java \ gnu/gcj/io/SimpleSHSStream.java \ diff --git a/libjava/Makefile.in b/libjava/Makefile.in index a68a718616c..cb924d58757 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -1923,6 +1923,7 @@ gnu/classpath/ServiceFactory.java \ gnu/classpath/ServiceProviderLoadingAction.java \ gnu/gcj/Core.java \ gnu/gcj/RawData.java \ +gnu/gcj/RawDataManaged.java \ gnu/gcj/io/DefaultMimeTypes.java \ gnu/gcj/io/MimeTypes.java \ gnu/gcj/io/SimpleSHSStream.java \ @@ -3075,7 +3076,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ .deps/gnu/awt/xlib/XToolkit.P .deps/gnu/classpath/Configuration.P \ .deps/gnu/classpath/ServiceFactory.P \ .deps/gnu/classpath/ServiceProviderLoadingAction.P .deps/gnu/gcj/Core.P \ -.deps/gnu/gcj/RawData.P .deps/gnu/gcj/convert/BytesToUnicode.P \ +.deps/gnu/gcj/RawData.P .deps/gnu/gcj/RawDataManaged.P \ +.deps/gnu/gcj/convert/BytesToUnicode.P \ .deps/gnu/gcj/convert/Convert.P .deps/gnu/gcj/convert/IOConverter.P \ .deps/gnu/gcj/convert/Input_8859_1.P \ .deps/gnu/gcj/convert/Input_ASCII.P \ diff --git a/libjava/gcj/cni.h b/libjava/gcj/cni.h index 59cf673b092..b9ee3829ce1 100644 --- a/libjava/gcj/cni.h +++ b/libjava/gcj/cni.h @@ -22,6 +22,7 @@ details. */ extern "C" jstring _Jv_NewStringUTF (const char *bytes); extern "C" void _Jv_InitClass (jclass); +extern "C" void *_Jv_AllocBytes (jsize size) __attribute__((__malloc__)); extern inline void JvInitClass (jclass cls) @@ -29,6 +30,12 @@ JvInitClass (jclass cls) return _Jv_InitClass (cls); } +extern inline void * +JvAllocBytes (jsize sz) +{ + return _Jv_AllocBytes (sz); +} + extern inline jstring JvAllocString (jsize sz) { diff --git a/libjava/gnu/gcj/RawDataManaged.java b/libjava/gnu/gcj/RawDataManaged.java new file mode 100644 index 00000000000..91a36acb952 --- /dev/null +++ b/libjava/gnu/gcj/RawDataManaged.java @@ -0,0 +1,23 @@ +/* Copyright (C) 2004 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +package gnu.gcj; + +/** A type used to indicate special data used by native code. Unlike the + <code>RawData</code> type, fields declared as <code>RawDataManaged</code> + will be "marked" by the memory manager and considered for garbage + collection. + + Native data which is allocated using CNI's <code>JvAllocBytes()</code> + function and stored in a <code>RawDataManaged</code> will be automatically + freed when the Java object it is associated with becomes unreachable. */ + +public final class RawDataManaged +{ + private RawDataManaged() { } +} diff --git a/libjava/java/lang/Thread.java b/libjava/java/lang/Thread.java index 0232a1d6afd..f631cc5aaea 100644 --- a/libjava/java/lang/Thread.java +++ b/libjava/java/lang/Thread.java @@ -39,6 +39,7 @@ exception statement from your version. */ package java.lang; import gnu.gcj.RawData; +import gnu.gcj.RawDataManaged; /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 @@ -127,7 +128,7 @@ public class Thread implements Runnable RawData interp_frame; // Our native data - points to an instance of struct natThread. - private Object data; + private RawDataManaged data; /** * Allocates a new <code>Thread</code> object. This constructor has diff --git a/libjava/java/lang/natThread.cc b/libjava/java/lang/natThread.cc index a131f058be7..ea235ce3789 100644 --- a/libjava/java/lang/natThread.cc +++ b/libjava/java/lang/natThread.cc @@ -16,6 +16,7 @@ details. */ #include <jvm.h> #include <java-threads.h> +#include <gnu/gcj/RawDataManaged.h> #include <java/lang/Thread.h> #include <java/lang/ThreadGroup.h> #include <java/lang/IllegalArgumentException.h> @@ -59,11 +60,7 @@ java::lang::Thread::initialize_native (void) { natThread *nt = (natThread *) _Jv_AllocBytes (sizeof (natThread)); - // The native thread data is kept in a Object field, not a RawData, so that - // the GC allocator can be used and a finalizer run after the thread becomes - // unreachable. Note that this relies on the GC's ability to finalize - // non-Java objects. FIXME? - data = reinterpret_cast<jobject> (nt); + data = (gnu::gcj::RawDataManaged *) nt; // Register a finalizer to clean up the native thread resources. _Jv_RegisterFinalizer (data, finalize_native); |