Skip to content

Commit 14e3306

Browse files
authoredAug 27, 2021
7903019: jcstress: Very long exceptions break the VM data streams
1 parent d8e24b8 commit 14e3306

File tree

6 files changed

+21
-36
lines changed

6 files changed

+21
-36
lines changed
 

‎jcstress-core/src/main/java/org/openjdk/jcstress/ForkedMain.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ public static void main(String[] args) throws Exception {
8080
forceExit = o.forceExit();
8181
} catch (ClassFormatError | NoClassDefFoundError | NoSuchMethodError | NoSuchFieldError e) {
8282
result = new TestResult(Status.API_MISMATCH);
83-
result.addMessage(StringUtils.getStacktrace(e));
83+
result.addMessages(e);
8484
} catch (Throwable ex) {
8585
result = new TestResult(Status.TEST_ERROR);
86-
result.addMessage(StringUtils.getStacktrace(ex));
86+
result.addMessages(ex);
8787
}
8888

8989
if (forceExit) {

‎jcstress-core/src/main/java/org/openjdk/jcstress/TestExecutor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ public synchronized void finish(TestResultCollector sink) {
477477
// There is a pending exception that terminated the target VM.
478478
if (pendingException != null) {
479479
result = new TestResult(Status.VM_ERROR);
480-
result.addMessage(pendingException.getMessage());
480+
result.addMessages(pendingException);
481481
result.setConfig(task);
482482
sink.add(result);
483483
return;
@@ -501,7 +501,7 @@ public synchronized void finish(TestResultCollector sink) {
501501
sink.add(result);
502502
} catch (InterruptedException | ExecutionException ex) {
503503
result = new TestResult(Status.VM_ERROR);
504-
result.addMessage(ex.getMessage());
504+
result.addMessages(ex);
505505
result.setConfig(task);
506506
sink.add(result);
507507
} finally {

‎jcstress-core/src/main/java/org/openjdk/jcstress/infra/collectors/TestResult.java

+9-12
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.openjdk.jcstress.infra.runners.TestConfig;
3131
import org.openjdk.jcstress.util.Counter;
3232
import org.openjdk.jcstress.util.Environment;
33+
import org.openjdk.jcstress.util.StringUtils;
3334

3435
import java.io.DataInputStream;
3536
import java.io.DataOutputStream;
@@ -117,31 +118,27 @@ public void addMessage(String msg) {
117118
messages.add(msg);
118119
}
119120

121+
public void addMessages(Throwable throwable) {
122+
addMessages(StringUtils.getStacktrace(throwable));
123+
}
124+
120125
public void addMessages(Collection<String> msgs) {
121126
for (String m : msgs) {
122127
addMessage(m);
123128
}
124129
}
125130

126-
public void addVMOut(String msg) {
127-
if (ReportUtils.skipMessage(msg)) return;
128-
vmOut.add(msg);
129-
}
130-
131131
public void addVMOuts(Collection<String> msgs) {
132132
for (String m : msgs) {
133-
addVMOut(m);
133+
if (ReportUtils.skipMessage(m)) continue;
134+
vmOut.add(m);
134135
}
135136
}
136137

137-
public void addVMErr(String msg) {
138-
if (ReportUtils.skipMessage(msg)) return;
139-
vmErr.add(msg);
140-
}
141-
142138
public void addVMErrs(Collection<String> msgs) {
143139
for (String m : msgs) {
144-
addVMErr(m);
140+
if (ReportUtils.skipMessage(m)) continue;
141+
vmErr.add(m);
145142
}
146143
}
147144

‎jcstress-core/src/main/java/org/openjdk/jcstress/infra/runners/Runner.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ protected TestResult dumpFailure(Status status, String message) {
114114
protected TestResult dumpFailure(Status status, String message, Throwable aux) {
115115
TestResult r = new TestResult(status);
116116
r.addMessage(message);
117-
r.addMessage(StringUtils.getStacktrace(aux));
117+
r.addMessages(aux);
118118
return r;
119119
}
120120

‎jcstress-core/src/main/java/org/openjdk/jcstress/util/StringUtils.java

+3-10
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.io.PrintWriter;
2828
import java.io.StringWriter;
2929
import java.util.ArrayList;
30+
import java.util.Arrays;
3031
import java.util.Collection;
3132
import java.util.List;
3233

@@ -117,20 +118,12 @@ public static String join(int[] list, String delim) {
117118
return sb.toString();
118119
}
119120

120-
public static String getStacktrace(Throwable throwable) {
121+
public static List<String> getStacktrace(Throwable throwable) {
121122
StringWriter sw = new StringWriter();
122123
PrintWriter pw = new PrintWriter(sw);
123124
throwable.printStackTrace(pw);
124125
pw.close();
125-
return sw.toString();
126-
}
127-
128-
public static String getFirstLine(String src) {
129-
int endLine = src.indexOf("\n");
130-
if (endLine > 0) {
131-
return src.substring(0, endLine).trim();
132-
}
133-
return src;
126+
return Arrays.asList(sw.toString().split(System.lineSeparator()));
134127
}
135128

136129
static final String[] PADS;

‎jcstress-core/src/test/java/org/openjdk/jcstress/util/StringUtilsTest.java

+4-9
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.junit.Test;
2929

3030
import java.util.Arrays;
31+
import java.util.List;
3132

3233
public class StringUtilsTest {
3334

@@ -43,16 +44,10 @@ public void test() {
4344

4445
@Test
4546
public void testGetStacktrace() {
46-
String actual = StringUtils.getStacktrace(new NullPointerException("my message"));
47-
String firstLine = StringUtils.getFirstLine(actual);
47+
List<String> actual = StringUtils.getStacktrace(new NullPointerException("my message"));
48+
String firstLine = actual.get(0);
4849

49-
Assert.assertEquals("java.lang.NullPointerException: my message", firstLine);
50-
}
51-
52-
@Test
53-
public void testGetFirstLine() {
54-
Assert.assertEquals("First line", StringUtils.getFirstLine("First line"));
55-
Assert.assertEquals("First line", StringUtils.getFirstLine("First line\nsecond line"));
50+
Assert.assertTrue(firstLine, firstLine.startsWith("java.lang.NullPointerException: my message"));
5651
}
5752

5853
@Test

0 commit comments

Comments
 (0)