6878284: Sometimes test/javax/swing/system/6799345/TestShutdown.java "hangs"
Reviewed-by: art, ant
--- 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);