EVALUATION
From the dump stack , found the dead lock mainly happens between 2 classes:
java.awt.Container and java.awt.KeyboardFocusManager.
compared 2 versions: jdk1.6.0_29 and Jdk1.7.0_01 for JDK source code in java.awt.Container and found following differences located in the place
where the dead lock happens:
JDK 1.6.0_29:
public void paint(Graphics g) {
if (isShowing()) {
if (printing) {
<---------- removed from JDK 7
synchronized (this) {
if (printing) {
if (printingThreads.contains(Thread.currentThread())) {
return;
}
}
}
}
JDK 1.7.0_01:
public void paint(Graphics g) {
if (isShowing()) {
synchronized (this) {
if (printing) {
<-------
if (printingThreads.contains(Thread.currentThread())) {
return;
}
}
}
Please check the line of code marked arrow dash and you could see that in
JDK1.7.0_01, this line has been removed.
It seems removing this line can cause deadlock?
|
EVALUATION
Found one Java-level deadlock:
=============================
"TickTimer":
waiting to lock monitor 0x05a3352c (object 0x2e4d36a0, a java.awt.Component$AWTTreeLock),
which is held by "InvalQueue-com.pogo.ui2.awt.ac[ClientApplet-GamePanel,0,0,538x354]-ClientApplet-GamePanel"
"InvalQueue-com.pogo.ui2.awt.ac[ClientApplet-GamePanel,0,0,538x354]-ClientApplet-GamePanel":
waiting to lock monitor 0x018a2c4c (object 0x2ea72eb8, a com.pogo.ui2.awt.v),
which is held by "AWT-EventQueue-4"
"AWT-EventQueue-4":
waiting to lock monitor 0x05a3352c (object 0x2e4d36a0, a java.awt.Component$AWTTreeLock),
which is held by "InvalQueue-com.pogo.ui2.awt.ac[ClientApplet-GamePanel,0,0,538x354]-ClientApplet-GamePanel"
Java stack information for the threads listed above:
===================================================
"TickTimer":
at com.pogo.ui2.awt.ac.a(SourceFile:228)
- waiting to lock <0x2e4d36a0> (a java.awt.Component$AWTTreeLock)
at com.pogo.game.client2.m.N(SourceFile:552)
at com.pogo.game.client2.ah.actionPerformed(SourceFile:2005)
at com.pogo.ui2.awt.ab.a(SourceFile:653)
at com.pogo.ui2.awt.anim.d.actionPerformed(SourceFile:63)
at com.pogo.ui2.awt.ab.a(SourceFile:653)
at com.pogo.ui2.awt.t.run(SourceFile:99)
at java.lang.Thread.run(Unknown Source)
"InvalQueue-com.pogo.ui2.awt.ac[ClientApplet-GamePanel,0,0,538x354]-ClientApplet-GamePanel":
at java.awt.Container.paint(Unknown Source)
- waiting to lock <0x2ea72eb8> (a com.pogo.ui2.awt.v)
at com.pogo.ui2.awt.ab.paint(SourceFile:415)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at com.pogo.ui2.awt.ab.paint(SourceFile:415)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at com.pogo.ui2.awt.ab.paint(SourceFile:415)
at com.pogo.game.client2.table.g.paint(SourceFile:1255)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at com.pogo.ui2.awt.ab.paint(SourceFile:415)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at com.pogo.ui2.awt.ac.a(SourceFile:301)
- locked <0x2e4d36a0> (a java.awt.Component$AWTTreeLock)
at com.pogo.ui2.awt.e.run(SourceFile:145)
at java.lang.Thread.run(Unknown Source)
"AWT-EventQueue-4":
at java.awt.KeyboardFocusManager.clearMostRecentFocusOwner(Unknown Source)
- waiting to lock <0x2e4d36a0> (a java.awt.Component$AWTTreeLock)
at java.awt.Component.disable(Unknown Source)
at java.awt.Component.enable(Unknown Source)
at java.awt.Component.setEnabled(Unknown Source)
at com.pogo.ui2.awt.f.setEnabled(SourceFile:264)
at com.pogo.game.client2.table.g.actionPerformed(SourceFile:1051)
- locked <0x2ea72eb8> (a com.pogo.ui2.awt.v)
at com.pogo.ui2.awt.ab.a(SourceFile:653)
at com.pogo.ui2.awt.f.mouseReleased(SourceFile:219)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Found 1 deadlock.
|