AppContext issue in Apple Java 6 -- same issue in Oracle Java 7?
Doug Zwick
Doug.Zwick at blackboard.com
Thu Jun 27 09:40:43 PDT 2013
Here is an example of the deadlocks we were seeing:
"AWT-EventQueue-0" prio=5 tid=0x00007fd234895000 nid=0x9a03 waiting for monitor entry [0x00000001381a9000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.awt.Component.invalidate(Component.java:2916)
- waiting to lock <0x0000000110335ae8> (a java.awt.Component$AWTTreeLock)
at java.awt.Container.invalidate(Container.java:1580)
at javax.swing.JComponent.revalidate(JComponent.java:4851)
at javax.swing.plaf.basic.BasicTextUI$RootView.preferenceChanged(BasicTextUI.java:1406)
at javax.swing.text.View.preferenceChanged(View.java:289)
at javax.swing.text.PlainView.updateDamage(PlainView.java:566)
at javax.swing.text.PlainView.insertUpdate(PlainView.java:451)
at javax.swing.text.FieldView.insertUpdate(FieldView.java:293)
at javax.swing.plaf.basic.BasicTextUI$RootView.insertUpdate(BasicTextUI.java:1602)
at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.insertUpdate(BasicTextUI.java:1861)
at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:202)
at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:749)
at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:708)
at javax.swing.text.PlainDocument.insertString(PlainDocument.java:130)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:670)
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1718)
…
"AWT-EventQueue-1" prio=5 tid=0x00007fd23489d000 nid=0x9d03 waiting for monitor entry [0x00000001384b2000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.awt.Container.getMouseEventTargetImpl(Container.java:2390)
- waiting to lock <0x0000000110335ae8> (a java.awt.Component$AWTTreeLock)
at java.awt.Container.getMouseEventTarget(Container.java:2356)
at java.awt.Container.getMouseEventTarget(Container.java:2319)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4470)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
…
"AWT-EventQueue-2" prio=5 tid=0x00007fd233823000 nid=0x9517 in Object.wait() [0x000000013e023000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x000000012d9c1458> (a javax.swing.text.PlainDocument)
at java.lang.Object.wait(Object.java:503)
at javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1387)
- locked <0x000000012d9c1458> (a javax.swing.text.PlainDocument)
at javax.swing.plaf.basic.BasicTextUI.paint(BasicTextUI.java:878)
at javax.swing.plaf.basic.BasicTextUI.update(BasicTextUI.java:860)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
- locked <0x0000000110335ae8> (a java.awt.Component$AWTTreeLock)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1508)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1439)
I'm not sure why AWT-EventQueue-1 seems to be contesting the same AWTTreeLock instance as -0 and -2. AFAIK, we were not getting caught up with the AWT-EventQueue-1 AppContext.
And here is an example of a stack trace from AWT-EventQueue-0 when dispatching an ActionListener.actionPerformed event triggered by the mouse on a screen menu bar menu item:
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at com.apple.laf.ScreenMenuItem.actionPerformed(ScreenMenuItem.java:128)
at java.awt.MenuItem.processActionEvent(MenuItem.java:669)
at java.awt.MenuItem.processEvent(MenuItem.java:628)
at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:351)
at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:339)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:738)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
The next frame in that stack trace is our ActionListener.actionPerformed implementation. No deadlocks involved, just calling us back from the wrong EDT.
This email and any attachments may contain confidential and proprietary information of Blackboard that is for the sole use of the intended recipient. If you are not the intended recipient, disclosure, copying, re-distribution or other use of any of this information is strictly prohibited. Please immediately notify the sender and delete this transmission if you received this email in error.
More information about the macosx-port-dev
mailing list