[#5720] Static initializers can cause deadlock

Motivation:

SystemPropertyUtil requires InternalLoggerFactory requires ThreadLocalRandom requires SystemPropertyUtil. This can lead to a dead-lock.

Modifications:

Ensure ThreadLocalRandom does not require SystemPropertyUtil during initialization.

Result:

No more deadlock possible.
This commit is contained in:
Norman Maurer 2016-08-19 14:15:19 +02:00
parent b5bd2ea66d
commit 8d9ca3c3c7

View File

@ -77,8 +77,13 @@ public final class ThreadLocalRandom extends Random {
long initialSeedUniquifier = ThreadLocalRandom.initialSeedUniquifier;
if (initialSeedUniquifier == 0) {
// Use the system property value.
ThreadLocalRandom.initialSeedUniquifier = initialSeedUniquifier =
SystemPropertyUtil.getLong("io.netty.initialSeedUniquifier", 0);
ThreadLocalRandom.initialSeedUniquifier = initialSeedUniquifier = AccessController.doPrivileged(
new PrivilegedAction<Long>() {
@Override
public Long run() {
return Long.getLong("io.netty.initialSeedUniquifier", 0);
}
});
}
// Otherwise, generate one.
@ -86,7 +91,7 @@ public final class ThreadLocalRandom extends Random {
boolean secureRandom = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
@Override
public Boolean run() {
return SystemPropertyUtil.getBoolean("java.util.secureRandomSeed", false);
return Boolean.getBoolean("java.util.secureRandomSeed");
}
});