6878284: Sometimes test/javax/swing/system/6799345/TestShutdown.java "hangs"
authordcherepanov
Wed, 30 Sep 2009 15:48:06 +0400
changeset 3969 6e77be3973ea
parent 3968 7f37f405ff5a
child 3970 a7c4a8080cc1
6878284: Sometimes test/javax/swing/system/6799345/TestShutdown.java "hangs" Reviewed-by: art, ant
jdk/src/share/classes/java/awt/EventQueue.java
jdk/src/share/classes/sun/awt/AWTAutoShutdown.java
--- a/jdk/src/share/classes/java/awt/EventQueue.java	Wed Sep 30 13:21:51 2009 +0400
+++ b/jdk/src/share/classes/java/awt/EventQueue.java	Wed Sep 30 15:48:06 2009 +0400
@@ -843,7 +843,8 @@
 
     final void initDispatchThread() {
         synchronized (this) {
-            if (dispatchThread == null && !threadGroup.isDestroyed()) {
+            AppContext appContext = AppContext.getAppContext();
+            if (dispatchThread == null && !threadGroup.isDestroyed() && !appContext.isDisposed()) {
                 dispatchThread = (EventDispatchThread)
                     AccessController.doPrivileged(new PrivilegedAction() {
                         public Object run() {
--- a/jdk/src/share/classes/sun/awt/AWTAutoShutdown.java	Wed Sep 30 13:21:51 2009 +0400
+++ b/jdk/src/share/classes/sun/awt/AWTAutoShutdown.java	Wed Sep 30 15:48:06 2009 +0400
@@ -154,14 +154,17 @@
 
     /**
      * Add a specified thread to the set of busy event dispatch threads.
-     * If this set already contains the specified thread, the call leaves
-     * this set unchanged and returns silently.
+     * If this set already contains the specified thread or the thread is null,
+     * the call leaves this set unchanged and returns silently.
      *
      * @param thread thread to be added to this set, if not present.
      * @see     AWTAutoShutdown#notifyThreadFree
      * @see     AWTAutoShutdown#isReadyToShutdown
      */
     public void notifyThreadBusy(final Thread thread) {
+        if (thread == null) {
+            return;
+        }
         synchronized (activationLock) {
             synchronized (mainLock) {
                 if (blockerThread == null) {
@@ -177,14 +180,17 @@
 
     /**
      * Remove a specified thread from the set of busy event dispatch threads.
-     * If this set doesn't contain the specified thread, the call leaves
-     * this set unchanged and returns silently.
+     * If this set doesn't contain the specified thread or the thread is null,
+     * the call leaves this set unchanged and returns silently.
      *
      * @param thread thread to be removed from this set, if present.
      * @see     AWTAutoShutdown#notifyThreadBusy
      * @see     AWTAutoShutdown#isReadyToShutdown
      */
     public void notifyThreadFree(final Thread thread) {
+        if (thread == null) {
+            return;
+        }
         synchronized (activationLock) {
             synchronized (mainLock) {
                 busyThreadSet.remove(thread);