--- a/jdk/src/share/classes/sun/awt/AWTAutoShutdown.java Thu Jan 16 17:49:40 2014 +0100
+++ b/jdk/src/share/classes/sun/awt/AWTAutoShutdown.java Wed Jan 15 11:53:54 2014 +0400
@@ -29,13 +29,13 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
-import java.util.Collections;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Set;
import sun.util.logging.PlatformLogger;
+import sun.misc.ThreadGroupUtils;
/**
* This class is to let AWT shutdown automatically when a user is done
@@ -217,7 +217,10 @@
synchronized (activationLock) {
synchronized (mainLock) {
if (!isReadyToShutdown() && blockerThread == null) {
- activateBlockerThread();
+ AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
+ activateBlockerThread();
+ return null;
+ });
} else {
mainLock.notifyAll();
timeoutPassed = false;
@@ -333,13 +336,12 @@
/**
* Creates and starts a new blocker thread. Doesn't return until
* the new blocker thread starts.
+ *
+ * Must be called with {@link sun.security.util.SecurityConstants#MODIFY_THREADGROUP_PERMISSION}
*/
private void activateBlockerThread() {
- Thread thread = new Thread(SunToolkit.getRootThreadGroup(), this, "AWT-Shutdown");
- AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
- thread.setContextClassLoader(null);
- return null;
- });
+ Thread thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this, "AWT-Shutdown");
+ thread.setContextClassLoader(null);
thread.setDaemon(false);
blockerThread = thread;
thread.start();