# HG changeset patch # User ant # Date 1411558571 -14400 # Node ID 57d7b3b1463b902e02d1656046b7561e9fade3f1 # Parent fd70c32a67ab81539310608562bd0b9c62f1e4cc 8058870: Mac: JFXPanel deadlocks in jnlp mode Reviewed-by: serb, alexsch diff -r fd70c32a67ab -r 57d7b3b1463b jdk/src/java.desktop/share/classes/javax/swing/JComponent.java --- a/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java Wed Sep 24 15:23:19 2014 +0400 +++ b/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java Wed Sep 24 15:36:11 2014 +0400 @@ -56,6 +56,7 @@ import java.io.IOException; import java.io.ObjectInputValidation; import java.io.InvalidObjectException; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.border.*; import javax.swing.event.*; @@ -354,7 +355,8 @@ private static final int AUTOSCROLLS_SET = 25; private static final int FOCUS_TRAVERSAL_KEYS_FORWARD_SET = 26; private static final int FOCUS_TRAVERSAL_KEYS_BACKWARD_SET = 27; - private static final int REVALIDATE_RUNNABLE_SCHEDULED = 28; + + private transient AtomicBoolean revalidateRunnableScheduled = new AtomicBoolean(false); /** * Temporary rectangles. @@ -4901,16 +4903,11 @@ // To avoid a flood of Runnables when constructing GUIs off // the EDT, a flag is maintained as to whether or not // a Runnable has been scheduled. - synchronized(this) { - if (getFlag(REVALIDATE_RUNNABLE_SCHEDULED)) { - return; - } - setFlag(REVALIDATE_RUNNABLE_SCHEDULED, true); + if (revalidateRunnableScheduled.getAndSet(true)) { + return; } SunToolkit.executeOnEventHandlerThread(this, () -> { - synchronized(JComponent.this) { - setFlag(REVALIDATE_RUNNABLE_SCHEDULED, false); - } + revalidateRunnableScheduled.set(false); revalidate(); }); } @@ -5567,6 +5564,7 @@ ToolTipManager.sharedInstance().registerComponent(this); } setWriteObjCounter(this, (byte)0); + revalidateRunnableScheduled = new AtomicBoolean(false); }