Skip to content

Commit 828cc6f

Browse files
committed
Race on late initializing crash tracking results JVM to crash
1 parent b7222fe commit 828cc6f

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import java.net.MalformedURLException;
6464
import java.net.URISyntaxException;
6565
import java.net.URL;
66+
import java.nio.ByteBuffer;
6667
import java.security.CodeSource;
6768
import java.util.EnumSet;
6869
import java.util.concurrent.TimeUnit;
@@ -183,7 +184,6 @@ public boolean isEnabledByDefault() {
183184
private static boolean codeOriginEnabled = false;
184185
private static boolean distributedDebuggerEnabled = false;
185186
private static boolean agentlessLogSubmissionEnabled = false;
186-
187187
/**
188188
* Starts the agent; returns a boolean indicating if Agent started successfully
189189
*
@@ -795,6 +795,10 @@ private static void startCrashTracking() {
795795
if (forceEarlyStart) {
796796
initializeCrashTrackingDefault();
797797
} else {
798+
// To workaround JDK-8345810, we want to initialize nio early,
799+
// which has dependence on libpthread. Creating a small nio ByteBuffer
800+
// to force nio initialization.
801+
ByteBuffer buffer = ByteBuffer.allocate(1);
798802
AgentTaskScheduler.get().execute(Agent::initializeCrashTrackingDefault);
799803
}
800804
} else {

dd-java-agent/src/main/java/datadog/trace/bootstrap/AgentBootstrap.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import datadog.trace.bootstrap.environment.EnvironmentVariables;
66
import datadog.trace.bootstrap.environment.JavaVirtualMachine;
7+
import datadog.trace.bootstrap.environment.OperatingSystem;
78
import datadog.trace.bootstrap.environment.SystemProperties;
89
import de.thetaphi.forbiddenapis.SuppressForbidden;
910
import java.io.BufferedReader;
@@ -61,7 +62,7 @@ public final class AgentBootstrap {
6162
// On Linux, libpthread must be loaded and initialized
6263
// while in single threaded mode.
6364
try {
64-
if ("Linux".equals(System.getProperty("os.name"))) {
65+
if (OperatingSystem.isLinux()) {
6566
System.loadLibrary("nio");
6667
}
6768
} catch (Exception e) {

0 commit comments

Comments
 (0)