-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
8u131
-
x86_64
-
linux_ubuntu
FULL PRODUCT VERSION :
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2ubuntu1.17.04.3-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux ____________ 4.10.0-32-generic #36-Ubuntu SMP Tue Aug 8 12:10:06 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
CPU: Ryzen 7 1700X (an 8/16 core/thread cpu, may affect things because of high thread count)
A DESCRIPTION OF THE PROBLEM :
Get the Code producing the Bug from Git: https://github.com/Vazkii/CMPDL
The Code produced a deadlock after taking the steps below. It involves a Thread (Operator in this case, sometimes main too) and the AWT-EventThread-$. The Thread sets the Text of an JTextField (replacing it, inportant), so it locks an AbstractDocument-Object for write and later enters a synchronized call. The AWT-EventThread is in an synchronized call on the same object and tries to get a read OR write lock on the AbstractDocument, causing the Deadlock. See ThreadDump below, the synchronized and lock stacks are marked.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
- Open the Application
- put this url (as an example) in the Modpack UTL field: https://minecraft.curseforge.com/projects/age-of-engineering
- hit download
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
A Log with download progress
ACTUAL -
3 lines of log (mostly, deadlocks are random)
resulting Deadlock
ERROR MESSAGES/STACK TRACES THAT OCCUR :
"Operator@2341" daemon prio=6 tid=0x1e nid=NA waiting for monitor entry
java.lang.Thread.State: BLOCKED
waiting for AWT-EventQueue-1@1741 to release lock on <0xb57> (a java.awt.Component$AWTTreeLock) <- synchronized
at java.awt.Component$AccessibleAWTComponent.getLocationOnScreen(Component.java:9488)
at javax.swing.JComponent$AccessibleJComponent.getLocationOnScreen(JComponent.java:3663)
at javax.swing.text.JTextComponent$AccessibleJTextComponent.caretUpdate(JTextComponent.java:2559)
at javax.swing.text.JTextComponent.fireCaretUpdate(JTextComponent.java:397)
at javax.swing.text.JTextComponent$MutableCaretEvent.fire(JTextComponent.java:4394)
at javax.swing.text.JTextComponent$MutableCaretEvent.stateChanged(JTextComponent.java:4416)
at javax.swing.text.DefaultCaret.fireStateChanged(DefaultCaret.java:802)
at javax.swing.text.DefaultCaret.changeCaretPosition(DefaultCaret.java:1274)
at javax.swing.text.DefaultCaret.handleSetDot(DefaultCaret.java:1173)
at javax.swing.text.DefaultCaret.setDot(DefaultCaret.java:1154)
at javax.swing.text.DefaultCaret$Handler.insertUpdate(DefaultCaret.java:1723)
at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:201)
at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:748)
at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:707)
at javax.swing.text.PlainDocument.insertString(PlainDocument.java:130)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:669) <- lock
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1669)
at vazkii.cmpdl.Interface.addLogLine(Interface.java:45)
at vazkii.cmpdl.CMPDL.log(CMPDL.java:379)
at vazkii.cmpdl.CMPDL.downloadFromURL(CMPDL.java:90)
at vazkii.cmpdl.OperatorThread.run(OperatorThread.java:19)
"AWT-EventQueue-1@1741" prio=6 tid=0x19 nid=NA waiting
java.lang.Thread.State: WAITING
blocks Operator@2341
at java.lang.Object.wait(Object.java:-1)
at java.lang.Object.wait(Object.java:502)
at javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1387) <- lock
at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:908)
at javax.swing.plaf.basic.BasicTextAreaUI.getPreferredSize(BasicTextAreaUI.java:120)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1662)
at javax.swing.JTextArea.getPreferredSize(JTextArea.java:618)
at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:791)
at java.awt.Container.layout(Container.java:1510)
at java.awt.Container.doLayout(Container.java:1499)
at java.awt.Container.validateTree(Container.java:1695)
at java.awt.Container.validate(Container.java:1630)
- locked <0xb57> (a java.awt.Component$AWTTreeLock) <- synchronized
at javax.swing.RepaintManager$3.run(RepaintManager.java:711)
at javax.swing.RepaintManager$3.run(RepaintManager.java:709)
at java.security.AccessController.doPrivileged(AccessController.java:-1)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:708)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1731)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(AccessController.java:-1)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at org.GNOME.Accessibility.AtkWrapper$5.dispatchEvent(AtkWrapper.java:700)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
REPRODUCIBILITY :
This bug can be reproduced often.
---------- BEGIN SOURCE ----------
I have tried recreating the Bug but failed. The still really unstable NVidia drivers crashed on me when executing and I do not want to risk having to fill in this bug report a secound time...
BUT this bug continues to have an effect on the Github code, this is an experimental code NOT showing the bug:
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.HeadlessException;
public class JTextFieldBug extends JFrame implements Runnable {
JTextField text;
public JTextFieldBug() throws HeadlessException {
setSize(800, 640);
setTitle("Test");
text = new JTextField();
text.setText("Initial");
add(text);
setVisible(true);
}
@Override
public void run() {
try {
while (true) {
text.setText("");
for (int i = 0; i < 1000; i++) {
text.setText(text.getText() + "a");
setTitle(String.valueOf(i));
}
Thread.sleep(10);
}
} catch (InterruptedException ignore) {
}
}
public static void main(String[] args) {
new JTextFieldBug().run();
}
}
---------- END SOURCE ----------
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2ubuntu1.17.04.3-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux ____________ 4.10.0-32-generic #36-Ubuntu SMP Tue Aug 8 12:10:06 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
CPU: Ryzen 7 1700X (an 8/16 core/thread cpu, may affect things because of high thread count)
A DESCRIPTION OF THE PROBLEM :
Get the Code producing the Bug from Git: https://github.com/Vazkii/CMPDL
The Code produced a deadlock after taking the steps below. It involves a Thread (Operator in this case, sometimes main too) and the AWT-EventThread-$. The Thread sets the Text of an JTextField (replacing it, inportant), so it locks an AbstractDocument-Object for write and later enters a synchronized call. The AWT-EventThread is in an synchronized call on the same object and tries to get a read OR write lock on the AbstractDocument, causing the Deadlock. See ThreadDump below, the synchronized and lock stacks are marked.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
- Open the Application
- put this url (as an example) in the Modpack UTL field: https://minecraft.curseforge.com/projects/age-of-engineering
- hit download
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
A Log with download progress
ACTUAL -
3 lines of log (mostly, deadlocks are random)
resulting Deadlock
ERROR MESSAGES/STACK TRACES THAT OCCUR :
"Operator@2341" daemon prio=6 tid=0x1e nid=NA waiting for monitor entry
java.lang.Thread.State: BLOCKED
waiting for AWT-EventQueue-1@1741 to release lock on <0xb57> (a java.awt.Component$AWTTreeLock) <- synchronized
at java.awt.Component$AccessibleAWTComponent.getLocationOnScreen(Component.java:9488)
at javax.swing.JComponent$AccessibleJComponent.getLocationOnScreen(JComponent.java:3663)
at javax.swing.text.JTextComponent$AccessibleJTextComponent.caretUpdate(JTextComponent.java:2559)
at javax.swing.text.JTextComponent.fireCaretUpdate(JTextComponent.java:397)
at javax.swing.text.JTextComponent$MutableCaretEvent.fire(JTextComponent.java:4394)
at javax.swing.text.JTextComponent$MutableCaretEvent.stateChanged(JTextComponent.java:4416)
at javax.swing.text.DefaultCaret.fireStateChanged(DefaultCaret.java:802)
at javax.swing.text.DefaultCaret.changeCaretPosition(DefaultCaret.java:1274)
at javax.swing.text.DefaultCaret.handleSetDot(DefaultCaret.java:1173)
at javax.swing.text.DefaultCaret.setDot(DefaultCaret.java:1154)
at javax.swing.text.DefaultCaret$Handler.insertUpdate(DefaultCaret.java:1723)
at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:201)
at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:748)
at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:707)
at javax.swing.text.PlainDocument.insertString(PlainDocument.java:130)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:669) <- lock
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1669)
at vazkii.cmpdl.Interface.addLogLine(Interface.java:45)
at vazkii.cmpdl.CMPDL.log(CMPDL.java:379)
at vazkii.cmpdl.CMPDL.downloadFromURL(CMPDL.java:90)
at vazkii.cmpdl.OperatorThread.run(OperatorThread.java:19)
"AWT-EventQueue-1@1741" prio=6 tid=0x19 nid=NA waiting
java.lang.Thread.State: WAITING
blocks Operator@2341
at java.lang.Object.wait(Object.java:-1)
at java.lang.Object.wait(Object.java:502)
at javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1387) <- lock
at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:908)
at javax.swing.plaf.basic.BasicTextAreaUI.getPreferredSize(BasicTextAreaUI.java:120)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1662)
at javax.swing.JTextArea.getPreferredSize(JTextArea.java:618)
at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:791)
at java.awt.Container.layout(Container.java:1510)
at java.awt.Container.doLayout(Container.java:1499)
at java.awt.Container.validateTree(Container.java:1695)
at java.awt.Container.validate(Container.java:1630)
- locked <0xb57> (a java.awt.Component$AWTTreeLock) <- synchronized
at javax.swing.RepaintManager$3.run(RepaintManager.java:711)
at javax.swing.RepaintManager$3.run(RepaintManager.java:709)
at java.security.AccessController.doPrivileged(AccessController.java:-1)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:708)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1731)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(AccessController.java:-1)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at org.GNOME.Accessibility.AtkWrapper$5.dispatchEvent(AtkWrapper.java:700)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
REPRODUCIBILITY :
This bug can be reproduced often.
---------- BEGIN SOURCE ----------
I have tried recreating the Bug but failed. The still really unstable NVidia drivers crashed on me when executing and I do not want to risk having to fill in this bug report a secound time...
BUT this bug continues to have an effect on the Github code, this is an experimental code NOT showing the bug:
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.HeadlessException;
public class JTextFieldBug extends JFrame implements Runnable {
JTextField text;
public JTextFieldBug() throws HeadlessException {
setSize(800, 640);
setTitle("Test");
text = new JTextField();
text.setText("Initial");
add(text);
setVisible(true);
}
@Override
public void run() {
try {
while (true) {
text.setText("");
for (int i = 0; i < 1000; i++) {
text.setText(text.getText() + "a");
setTitle(String.valueOf(i));
}
Thread.sleep(10);
}
} catch (InterruptedException ignore) {
}
}
public static void main(String[] args) {
new JTextFieldBug().run();
}
}
---------- END SOURCE ----------