[#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:
parent
b5bd2ea66d
commit
8d9ca3c3c7
@ -77,8 +77,13 @@ public final class ThreadLocalRandom extends Random {
|
|||||||
long initialSeedUniquifier = ThreadLocalRandom.initialSeedUniquifier;
|
long initialSeedUniquifier = ThreadLocalRandom.initialSeedUniquifier;
|
||||||
if (initialSeedUniquifier == 0) {
|
if (initialSeedUniquifier == 0) {
|
||||||
// Use the system property value.
|
// Use the system property value.
|
||||||
ThreadLocalRandom.initialSeedUniquifier = initialSeedUniquifier =
|
ThreadLocalRandom.initialSeedUniquifier = initialSeedUniquifier = AccessController.doPrivileged(
|
||||||
SystemPropertyUtil.getLong("io.netty.initialSeedUniquifier", 0);
|
new PrivilegedAction<Long>() {
|
||||||
|
@Override
|
||||||
|
public Long run() {
|
||||||
|
return Long.getLong("io.netty.initialSeedUniquifier", 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, generate one.
|
// Otherwise, generate one.
|
||||||
@ -86,7 +91,7 @@ public final class ThreadLocalRandom extends Random {
|
|||||||
boolean secureRandom = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
|
boolean secureRandom = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
|
||||||
@Override
|
@Override
|
||||||
public Boolean run() {
|
public Boolean run() {
|
||||||
return SystemPropertyUtil.getBoolean("java.util.secureRandomSeed", false);
|
return Boolean.getBoolean("java.util.secureRandomSeed");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user