aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang/Thread.java
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2007-02-16 13:51:04 +0000
committerAndrew Haley <aph@gcc.gnu.org>2007-02-16 13:51:04 +0000
commit24d8ce15e2daacbc37d9d727f7a6ded79aad5e92 (patch)
tree959c3c9976841825636b5dad2623a5818c7188d3 /libjava/java/lang/Thread.java
parent421076b552721090c5901ff4797d155e5a5a69c8 (diff)
downloadgcc-24d8ce15e2daacbc37d9d727f7a6ded79aad5e92.zip
gcc-24d8ce15e2daacbc37d9d727f7a6ded79aad5e92.tar.gz
gcc-24d8ce15e2daacbc37d9d727f7a6ded79aad5e92.tar.bz2
[multiple changes]
2007-02-15 Andrew Haley <aph@redhat.com> * Makefile.am (nat_source_files): Remove java/lang/management/natVMManagementFactory.cc. * java/lang/Thread.java (getStackTrace): Use reflection to call the ManagementFactory. * java/lang/management/VMManagementFactory.java: Remove native methods. * java/lang/management/natVMManagementFactory.cc: Deleted. * sources.am: Regnerate. * scripts/makemake.tcl: Add new "bcheaders" type. Move java/lang/management and gnu/classpath/management to "bc". Move gnu/java/lang/management to "bcheaders". 2007-02-16 Andrew Haley <aph@redhat.com> * gnu/java/lang/management/MemoryMXBeanImpl.java, javax/management/MBeanServerDelegate.java: Use gnu.javax.management.ListenerData rather than gnu.classpath.ListenerData. * gnu/javax/management/ListenerData.java: Move here from gnu/classpath/ListenerData.java. From-SVN: r122041
Diffstat (limited to 'libjava/java/lang/Thread.java')
-rw-r--r--libjava/java/lang/Thread.java45
1 files changed, 41 insertions, 4 deletions
diff --git a/libjava/java/lang/Thread.java b/libjava/java/lang/Thread.java
index 7216512..84682f3 100644
--- a/libjava/java/lang/Thread.java
+++ b/libjava/java/lang/Thread.java
@@ -50,6 +50,9 @@ import java.lang.management.ThreadMXBean;
import java.util.HashMap;
import java.util.Map;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
* plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
@@ -1291,9 +1294,43 @@ public class Thread implements Runnable
SecurityManager sm = SecurityManager.current; // Be thread-safe.
if (sm != null)
sm.checkPermission(new RuntimePermission("getStackTrace"));
- ThreadMXBean bean = ManagementFactory.getThreadMXBean();
- ThreadInfo info = bean.getThreadInfo(getId(), Integer.MAX_VALUE);
- return info.getStackTrace();
- }
+ // Calling java.lang.management via reflection means that
+ // javax.management be overridden in the endorsed directory.
+
+ // This is the equivalent code:
+ //
+ // ThreadMXBean bean = ManagementFactory.getThreadMXBean();
+ // ThreadInfo info = bean.getThreadInfo(getId(), Integer.MAX_VALUE);
+ // return info.getStackTrace();
+
+ try
+ {
+ try
+ {
+ Object bean
+ = (Class.forName("java.lang.management.ManagementFactory")
+ .getDeclaredMethod("getThreadMXBean")
+ .invoke(null));
+ Object info = bean.getClass()
+ .getDeclaredMethod("getThreadInfo", long.class, int.class)
+ .invoke(bean, new Long(getId()), new Integer(Integer.MAX_VALUE));
+ Object trace = info.getClass()
+ .getDeclaredMethod("getStackTrace").invoke(info);
+ return (StackTraceElement[])trace;
+ }
+ catch (InvocationTargetException e)
+ {
+ throw (Exception)e.getTargetException();
+ }
+ }
+ catch (UnsupportedOperationException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ throw new UnsupportedOperationException(e);
+ }
+ }
}