X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/593f7525c1fbd75ab6c4f105f9f340401464fe0b..16673e04b393c2d8c031d0d77ec318ac2c711f4e:/src/bindings/java/org/simgrid/msg/Process.java diff --git a/src/bindings/java/org/simgrid/msg/Process.java b/src/bindings/java/org/simgrid/msg/Process.java index 18664acbd1..0fb5c6f13a 100644 --- a/src/bindings/java/org/simgrid/msg/Process.java +++ b/src/bindings/java/org/simgrid/msg/Process.java @@ -5,8 +5,12 @@ package org.simgrid.msg; -import java.util.Arrays; +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadInfo; +import java.lang.management.ThreadMXBean; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * A process may be defined as a code, with some private data, executing @@ -301,6 +305,8 @@ public abstract class Process implements Runnable { } catch(ProcessKilledError pk) { /* The process was killed before its end. With a kill() or something. */ + //Msg.info("Forwarding a PKE"); + throw pk; } } @@ -331,4 +337,44 @@ public abstract class Process implements Runnable { */ public static native int getCount(); + public static void debugAllThreads() { + final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + long[] deads = threadMXBean.findDeadlockedThreads(); + if (deads != null) + for (long dead : deads) + System.err.println("Thread deadlocked: "+dead); + + // Search remaining threads that are not main nor daemon + List ids = new ArrayList<>(); + for (Thread t : Thread.getAllStackTraces().keySet()) { + if (! t.isDaemon() && !t.getName().equals("main")) + ids.add(t.getId()); + } + if (ids.size() > 0) { + long[] id_array = new long[ids.size()]; + for (int i=0; i