提交 21172bb2 编写于 作者: D dcherepanov

6878284: Sometimes test/javax/swing/system/6799345/TestShutdown.java "hangs"

Reviewed-by: art, ant
上级 3c328faa
...@@ -843,7 +843,8 @@ public class EventQueue { ...@@ -843,7 +843,8 @@ public class EventQueue {
final void initDispatchThread() { final void initDispatchThread() {
synchronized (this) { synchronized (this) {
if (dispatchThread == null && !threadGroup.isDestroyed()) { AppContext appContext = AppContext.getAppContext();
if (dispatchThread == null && !threadGroup.isDestroyed() && !appContext.isDisposed()) {
dispatchThread = (EventDispatchThread) dispatchThread = (EventDispatchThread)
AccessController.doPrivileged(new PrivilegedAction() { AccessController.doPrivileged(new PrivilegedAction() {
public Object run() { public Object run() {
......
...@@ -154,14 +154,17 @@ public final class AWTAutoShutdown implements Runnable { ...@@ -154,14 +154,17 @@ public final class AWTAutoShutdown implements Runnable {
/** /**
* Add a specified thread to the set of busy event dispatch threads. * Add a specified thread to the set of busy event dispatch threads.
* If this set already contains the specified thread, the call leaves * If this set already contains the specified thread or the thread is null,
* this set unchanged and returns silently. * the call leaves this set unchanged and returns silently.
* *
* @param thread thread to be added to this set, if not present. * @param thread thread to be added to this set, if not present.
* @see AWTAutoShutdown#notifyThreadFree * @see AWTAutoShutdown#notifyThreadFree
* @see AWTAutoShutdown#isReadyToShutdown * @see AWTAutoShutdown#isReadyToShutdown
*/ */
public void notifyThreadBusy(final Thread thread) { public void notifyThreadBusy(final Thread thread) {
if (thread == null) {
return;
}
synchronized (activationLock) { synchronized (activationLock) {
synchronized (mainLock) { synchronized (mainLock) {
if (blockerThread == null) { if (blockerThread == null) {
...@@ -177,14 +180,17 @@ public final class AWTAutoShutdown implements Runnable { ...@@ -177,14 +180,17 @@ public final class AWTAutoShutdown implements Runnable {
/** /**
* Remove a specified thread from the set of busy event dispatch threads. * Remove a specified thread from the set of busy event dispatch threads.
* If this set doesn't contain the specified thread, the call leaves * If this set doesn't contain the specified thread or the thread is null,
* this set unchanged and returns silently. * the call leaves this set unchanged and returns silently.
* *
* @param thread thread to be removed from this set, if present. * @param thread thread to be removed from this set, if present.
* @see AWTAutoShutdown#notifyThreadBusy * @see AWTAutoShutdown#notifyThreadBusy
* @see AWTAutoShutdown#isReadyToShutdown * @see AWTAutoShutdown#isReadyToShutdown
*/ */
public void notifyThreadFree(final Thread thread) { public void notifyThreadFree(final Thread thread) {
if (thread == null) {
return;
}
synchronized (activationLock) { synchronized (activationLock) {
synchronized (mainLock) { synchronized (mainLock) {
busyThreadSet.remove(thread); busyThreadSet.remove(thread);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册