From 739315afb4e84950d01a5a65f0f1a6959737208a Mon Sep 17 00:00:00 2001 From: nathan Date: Fri, 18 Mar 2016 15:59:53 +0100 Subject: [PATCH] Added java6 compatibility fix --- src/dorkbox/network/DnsClient.java | 12 +++++++++++- src/dorkbox/network/connection/EndPoint.java | 18 ++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/dorkbox/network/DnsClient.java b/src/dorkbox/network/DnsClient.java index 26114d87..8ae5eef8 100644 --- a/src/dorkbox/network/DnsClient.java +++ b/src/dorkbox/network/DnsClient.java @@ -74,12 +74,22 @@ import java.util.concurrent.TimeUnit; public class DnsClient { + // duplicated in EndPoint static { + //noinspection Duplicates try { - // doesn't work in eclipse. + // doesn't work when running from inside eclipse. // Needed for NIO selectors on Android 2.2, and to force IPv4. System.setProperty("java.net.preferIPv4Stack", Boolean.TRUE.toString()); System.setProperty("java.net.preferIPv6Addresses", Boolean.FALSE.toString()); + + // java6 has stack overflow problems when loading certain classes in it's classloader. The result is a StackOverflow when + // loading them normally + if (OS.javaVersion == 6) { + if (PlatformDependent.hasUnsafe()) { + PlatformDependent.newFixedMpscQueue(8); + } + } } catch (AccessControlException ignored) { } } diff --git a/src/dorkbox/network/connection/EndPoint.java b/src/dorkbox/network/connection/EndPoint.java index 5b68e495..760d6eea 100644 --- a/src/dorkbox/network/connection/EndPoint.java +++ b/src/dorkbox/network/connection/EndPoint.java @@ -28,6 +28,7 @@ import dorkbox.network.rmi.RmiBridge; import dorkbox.network.util.CryptoSerializationManager; import dorkbox.network.util.store.NullSettingsStore; import dorkbox.network.util.store.SettingsStore; +import dorkbox.util.OS; import dorkbox.util.Property; import dorkbox.util.collections.IntMap; import dorkbox.util.collections.IntMap.Entries; @@ -41,12 +42,14 @@ import io.netty.channel.EventLoopGroup; import io.netty.util.NetUtil; import io.netty.util.concurrent.EventExecutor; import io.netty.util.concurrent.Future; +import io.netty.util.internal.PlatformDependent; import org.bouncycastle.crypto.AsymmetricCipherKeyPair; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.slf4j.Logger; import java.io.IOException; +import java.security.AccessControlException; import java.security.SecureRandom; import java.util.ArrayList; import java.util.Collection; @@ -127,16 +130,27 @@ class EndPoint { public static int udpMaxSize = 508; + // duplicated in DnsClient static { + //noinspection Duplicates try { - // doesn't work in eclipse. + // doesn't work when running from inside eclipse. // Needed for NIO selectors on Android 2.2, and to force IPv4. System.setProperty("java.net.preferIPv4Stack", Boolean.TRUE.toString()); System.setProperty("java.net.preferIPv6Addresses", Boolean.FALSE.toString()); - } catch (Throwable ignored) { + + // java6 has stack overflow problems when loading certain classes in it's classloader. The result is a StackOverflow when + // loading them normally + if (OS.javaVersion == 6) { + if (PlatformDependent.hasUnsafe()) { + PlatformDependent.newFixedMpscQueue(8); + } + } + } catch (AccessControlException ignored) { } } + protected final org.slf4j.Logger logger; protected final ThreadGroup threadGroup;