diff options
author | Andrew Haley <aph@redhat.com> | 2007-02-16 13:51:04 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 2007-02-16 13:51:04 +0000 |
commit | 24d8ce15e2daacbc37d9d727f7a6ded79aad5e92 (patch) | |
tree | 959c3c9976841825636b5dad2623a5818c7188d3 /libjava/java/lang/Thread.java | |
parent | 421076b552721090c5901ff4797d155e5a5a69c8 (diff) | |
download | gcc-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.java | 45 |
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); + } + } } |