Skip to content

Commit b476b60

Browse files
committed
Dump threads if the leak test fails
1 parent 8b5abc5 commit b476b60

File tree

1 file changed

+23
-0
lines changed
  • graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/advance

1 file changed

+23
-0
lines changed

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/advance/LeakTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,15 @@
4040
*/
4141
package com.oracle.graal.python.test.advance;
4242

43+
import java.io.BufferedWriter;
44+
import java.io.FileWriter;
4345
import java.io.IOException;
4446
import java.lang.management.ManagementFactory;
47+
import java.lang.management.ThreadInfo;
48+
import java.lang.management.ThreadMXBean;
4549
import java.nio.file.Files;
4650
import java.nio.file.Path;
51+
import java.nio.file.Paths;
4752
import java.util.ArrayList;
4853
import java.util.List;
4954
import java.util.Map;
@@ -120,15 +125,33 @@ private void dumpAndAnalyze() {
120125
}
121126

122127
MBeanServer server = doFullGC();
128+
String threadDump = getThreadDump();
123129
Path dumpFile = dumpHeap(server);
124130
boolean fail = checkForLeaks(dumpFile);
125131
if (fail) {
132+
System.err.print(threadDump);
126133
System.exit(255);
127134
} else {
128135
System.exit(0);
129136
}
130137
}
131138

139+
private String getThreadDump() {
140+
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
141+
ThreadInfo[] threads = threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds(), 100);
142+
final String line = "=====================================\n";
143+
StringBuilder sb = new StringBuilder(line);
144+
for (ThreadInfo thread : threads) {
145+
sb.append("-------\n");
146+
sb.append(thread.getThreadName()).append('\n');
147+
sb.append("Thread state:").append(thread.getThreadState()).append('\n');
148+
for (StackTraceElement element : thread.getStackTrace()) {
149+
sb.append(" ").append(element).append('\n');
150+
}
151+
}
152+
return sb.append(line).toString();
153+
}
154+
132155
private boolean checkForLeaks(Path dumpFile) {
133156
boolean fail = false;
134157
try {

0 commit comments

Comments
 (0)