summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2004-05-28 18:53:06 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2004-05-28 18:53:06 +0000
commit7814c20f47832b56ad105fa73db89894bf0d9cf9 (patch)
treea45dca3a962b2788d50822d0c51a8159a48662d5 /libjava
parent383051ad981ca5ce88fdab1eb2b434290177b9b4 (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--libjava/Makefile.am1
-rw-r--r--libjava/Makefile.in4
-rw-r--r--libjava/gcj/cni.h7
-rw-r--r--libjava/gnu/gcj/RawDataManaged.java23
-rw-r--r--libjava/java/lang/Thread.java3
-rw-r--r--libjava/java/lang/natThread.cc7
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);