From 21172bb2badccb5818fae21723cd9abe864a8908 Mon Sep 17 00:00:00 2001 From: dcherepanov Date: Wed, 30 Sep 2009 15:48:06 +0400 Subject: [PATCH] 6878284: Sometimes test/javax/swing/system/6799345/TestShutdown.java "hangs" Reviewed-by: art, ant --- src/share/classes/java/awt/EventQueue.java | 3 ++- src/share/classes/sun/awt/AWTAutoShutdown.java | 14 ++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/share/classes/java/awt/EventQueue.java b/src/share/classes/java/awt/EventQueue.java index 452305153..f7fe996ab 100644 --- a/src/share/classes/java/awt/EventQueue.java +++ b/src/share/classes/java/awt/EventQueue.java @@ -843,7 +843,8 @@ public class EventQueue { 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() { diff --git a/src/share/classes/sun/awt/AWTAutoShutdown.java b/src/share/classes/sun/awt/AWTAutoShutdown.java index 871da0ce3..91d646021 100644 --- a/src/share/classes/sun/awt/AWTAutoShutdown.java +++ b/src/share/classes/sun/awt/AWTAutoShutdown.java @@ -154,14 +154,17 @@ public final class AWTAutoShutdown implements Runnable { /** * 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 @@ public final class AWTAutoShutdown implements Runnable { /** * 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); -- GitLab