Skip to content

Commit

Permalink
Initialize Offline runtime outside class initializers
Browse files Browse the repository at this point in the history
This avoids JVM crashes, see JDK-8228485.
  • Loading branch information
marchof committed Aug 8, 2019
1 parent 9b5e9f8 commit bd40de1
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 14 deletions.
28 changes: 16 additions & 12 deletions org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java
Expand Up @@ -22,23 +22,27 @@
*/
public final class Offline {

private static final RuntimeData DATA;
private static final String CONFIG_RESOURCE = "/jacoco-agent.properties";

static {
final Properties config = ConfigLoader.load(CONFIG_RESOURCE,
System.getProperties());
try {
DATA = Agent.getInstance(new AgentOptions(config)).getData();
} catch (final Exception e) {
throw new RuntimeException("Failed to initialize JaCoCo.", e);
}
}

private Offline() {
// no instances
}

private static RuntimeData data;

private static synchronized RuntimeData getRuntimeData() {
if (data == null) {
final Properties config = ConfigLoader.load(CONFIG_RESOURCE,
System.getProperties());
try {
data = Agent.getInstance(new AgentOptions(config)).getData();
} catch (final Exception e) {
throw new RuntimeException("Failed to initialize JaCoCo.", e);
}
}
return data;
}

/**
* API for offline instrumented classes.
*
Expand All @@ -52,7 +56,7 @@ private Offline() {
*/
public static boolean[] getProbes(final long classid,
final String classname, final int probecount) {
return DATA
return getRuntimeData()
.getExecutionData(Long.valueOf(classid), classname, probecount)
.getProbes();
}
Expand Down
4 changes: 2 additions & 2 deletions org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.xml
Expand Up @@ -139,8 +139,8 @@
<pathelement path="${temp.dir}"/>
</classpath>
</java>
<au:assertLogContains text="Caused by: java.lang.RuntimeException: Failed to initialize JaCoCo."/>
<au:assertLogContains text="Caused by: java.lang.NumberFormatException: For input string: &quot;foo&quot;"/>
<au:assertLogContains text="java.lang.RuntimeException: Failed to initialize JaCoCo."/>
<au:assertLogContains text="java.lang.NumberFormatException: For input string: &quot;foo&quot;"/>
</target>

</project>

0 comments on commit bd40de1

Please sign in to comment.