Skip to content

Commit d63ec8f

Browse files
AFFINITY-8 Added some debug statements for the case when loading one or the other Affinity implementation fails
1 parent 4e8bf9c commit d63ec8f

1 file changed

Lines changed: 50 additions & 3 deletions

File tree

affinity/src/main/java/net/openhft/affinity/AffinitySupport.java

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import net.openhft.affinity.impl.WindowsJNAAffinity;
2323
import org.jetbrains.annotations.NotNull;
2424

25+
import java.io.PrintWriter;
26+
import java.io.StringWriter;
2527
import java.lang.reflect.Field;
2628
import java.util.logging.Logger;
2729

@@ -39,13 +41,13 @@ public enum AffinitySupport {
3941

4042
static {
4143
String osName = System.getProperty("os.name");
42-
if (osName.contains("Win") && isJNAAvailable() && WindowsJNAAffinity.LOADED) {
44+
if (osName.contains("Win") && isWindowsJNAAffinityUsable()) {
4345
LOGGER.fine("Using Windows JNA-based affinity control implementation");
4446
AFFINITY_IMPL = WindowsJNAAffinity.INSTANCE;
45-
} else if (osName.contains("x") && isJNAAvailable() && PosixJNAAffinity.LOADED) {
47+
} else if (osName.contains("x") && isPosixJNAAffinityUsable()) {
4648
LOGGER.fine("Using Posix JNA-based affinity control implementation");
4749
AFFINITY_IMPL = PosixJNAAffinity.INSTANCE;
48-
} else if (osName.contains("Mac") && isJNAAvailable()) {
50+
} else if (osName.contains("Mac") && isMacJNAAffinityUsable()) {
4951
LOGGER.fine("Using MAC OSX JNA-based thread id implementation");
5052
AFFINITY_IMPL = OSXJNAAffinity.INSTANCE;
5153
} else {
@@ -54,6 +56,51 @@ public enum AffinitySupport {
5456
}
5557
}
5658

59+
private static boolean isWindowsJNAAffinityUsable() {
60+
if (isJNAAvailable()) {
61+
try {
62+
return WindowsJNAAffinity.LOADED;
63+
} catch (Throwable t) {
64+
logThrowable(t, "Windows JNA-based affinity not usable because it failed to load!");
65+
return false;
66+
}
67+
} else {
68+
LOGGER.warning("Windows JNA-based affinity not usable due to JNA not being available!");
69+
return false;
70+
}
71+
}
72+
73+
private static boolean isPosixJNAAffinityUsable() {
74+
if (isJNAAvailable()) {
75+
try {
76+
return PosixJNAAffinity.LOADED;
77+
} catch (Throwable t) {
78+
logThrowable(t, "Posix JNA-based affinity not usable because it failed to load!");
79+
return false;
80+
}
81+
} else {
82+
LOGGER.warning("Posix JNA-based affinity not usable due to JNA not being available!");
83+
return false;
84+
}
85+
}
86+
87+
private static boolean isMacJNAAffinityUsable() {
88+
if (isJNAAvailable()) {
89+
return true;
90+
} else {
91+
LOGGER.warning("MAX OSX JNA-based affinity not usable due to JNA not being available!");
92+
return false;
93+
}
94+
}
95+
96+
private static void logThrowable(Throwable t, String description) {
97+
StringWriter sw = new StringWriter();
98+
sw.append(description);
99+
sw.append(" Reason: ");
100+
t.printStackTrace(new PrintWriter(sw));
101+
LOGGER.warning(sw.toString());
102+
}
103+
57104
public static long getAffinity() {
58105
return AFFINITY_IMPL.getAffinity();
59106
}

0 commit comments

Comments
 (0)