<AWT Dev> hang when doing a fastdebug build

David Holmes david.holmes at oracle.com
Mon Feb 20 15:29:31 PST 2012


The AWT eventqueue thread has called System.exit and is waiting for a 
shutdown hook thread to complete. I'm guessing that thread is Thread-0, 
which is currently out in native code executing WToolkit.shutdown. So 
from the Java stacks there is no way to tell what that thread is doing 
(ie whether it is making progress).

David

On 21/02/2012 4:22 AM, Pete Brunet wrote:
> There is something about a patch I am working on that results in a hang
> when exiting an app with a fastdebug build but not with a product
> build.  The results of ctrl+break follow.  Could someone look at this
> and give me a hint as to what the deadlock is?  Thanks, Pete
>
> Full thread dump OpenJDK Client VM (23.0-b11-fastdebug mixed mode):
>
> "Thread-0" daemon prio=6 tid=0x0863ac00 nid=0x10c8 runnable [0x07d5f000]
>     java.lang.Thread.State: RUNNABLE
>     JavaThread state: _thread_in_native
> Thread: 0x0863ac00  [0x10c8] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_in_native
>          at sun.awt.windows.WToolkit.shutdown(Native Method)
>          at sun.awt.windows.WToolkit.access$200(WToolkit.java:67)
>          at sun.awt.windows.WToolkit$2$1.run(WToolkit.java:275)
>          at java.lang.Thread.run(Thread.java:722)
>
> "SwingWorker-pool-1-thread-1" daemon prio=6 tid=0x088c3800 nid=0x166c
> waiting on condition [0x09d2f000]
>     java.lang.Thread.State: WAITING (parking)
>     JavaThread state: _thread_blocked
> Thread: 0x088c3800  [0x166c] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>          at sun.misc.Unsafe.park(Native Method)
>          - parking to wait for<0x15ffc1e0>  (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>          at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>          at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>          at
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
>          at
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1045)
>          at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
>          at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>          at java.lang.Thread.run(Thread.java:722)
>
> "DestroyJavaVM" prio=6 tid=0x00ec9000 nid=0xfa0 waiting on condition
> [0x00000000]
>     java.lang.Thread.State: RUNNABLE
>     JavaThread state: _thread_blocked
> Thread: 0x00ec9000  [0xfa0] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>
> "AWT-EventQueue-0" prio=6 tid=0x0581f800 nid=0x125c in Object.wait()
> [0x084de000]
>     java.lang.Thread.State: WAITING (on object monitor)
>     JavaThread state: _thread_blocked
> Thread: 0x0581f800  [0x125c] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>          at java.lang.Object.wait(Native Method)
>          - waiting on<0x155c77e0>  (a java.lang.Thread)
>          at java.lang.Thread.join(Thread.java:1258)
>          - locked<0x155c77e0>  (a java.lang.Thread)
>          at java.lang.Thread.join(Thread.java:1332)
>          at
> java.lang.ApplicationShutdownHooks.runHooks(ApplicationShutdownHooks.java:106)
>          at
> java.lang.ApplicationShutdownHooks$1.run(ApplicationShutdownHooks.java:46)
>          at java.lang.Shutdown.runHooks(Shutdown.java:123)
>          at java.lang.Shutdown.sequence(Shutdown.java:167)
>          at java.lang.Shutdown.exit(Shutdown.java:212)
>          - locked<0x156be6b8>  (a java.lang.Class for java.lang.Shutdown)
>          at java.lang.Runtime.exit(Runtime.java:107)
>          at java.lang.System.exit(System.java:961)
>          at javax.swing.JFrame.processWindowEvent(JFrame.java:312)
>          at java.awt.Window.processEvent(Window.java:2003)
>          at java.awt.Component.dispatchEventImpl(Component.java:4866)
>          at java.awt.Container.dispatchEventImpl(Container.java:2287)
>          at java.awt.Window.dispatchEventImpl(Window.java:2713)
>          at java.awt.Component.dispatchEvent(Component.java:4691)
>          at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703)
>          at java.awt.EventQueue.access$000(EventQueue.java:102)
>          at java.awt.EventQueue$3.run(EventQueue.java:662)
>          at java.awt.EventQueue$3.run(EventQueue.java:660)
>          at java.security.AccessController.doPrivileged(Native Method)
>          at
> java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
>          at
> java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
>          at java.awt.EventQueue$4.run(EventQueue.java:676)
>          at java.awt.EventQueue$4.run(EventQueue.java:674)
>          at java.security.AccessController.doPrivileged(Native Method)
>          at
> java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
>          at java.awt.EventQueue.dispatchEvent(EventQueue.java:673)
>          at
> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:216)
>          at
> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:135)
>          at
> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:123)
>          at
> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:119)
>          at
> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:111)
>          at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
>
> "AWT-Shutdown" prio=6 tid=0x0581f400 nid=0x1bb0 in Object.wait()
> [0x0837f000]
>     java.lang.Thread.State: WAITING (on object monitor)
>     JavaThread state: _thread_blocked
> Thread: 0x0581f400  [0x1bb0] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>          at java.lang.Object.wait(Native Method)
>          - waiting on<0x15596128>  (a java.lang.Object)
>          at java.lang.Object.wait(Object.java:502)
>          at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:290)
>          - locked<0x15596128>  (a java.lang.Object)
>          at java.lang.Thread.run(Thread.java:722)
>
> "TimerQueue" daemon prio=6 tid=0x04df5400 nid=0x18a4 waiting on
> condition [0x0862f000]
>     java.lang.Thread.State: WAITING (parking)
>     JavaThread state: _thread_blocked
> Thread: 0x04df5400  [0x18a4] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>          at sun.misc.Unsafe.park(Native Method)
>          - parking to wait for<0x15684668>  (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>          at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>          at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>          at java.util.concurrent.DelayQueue.take(DelayQueue.java:209)
>          at javax.swing.TimerQueue.run(TimerQueue.java:171)
>          at java.lang.Thread.run(Thread.java:722)
>
> "AWT-Windows" daemon prio=6 tid=0x056d7c00 nid=0x1658 runnable [0x05cff000]
>     java.lang.Thread.State: RUNNABLE
>     JavaThread state: _thread_blocked
> Thread: 0x056d7c00  [0x1658] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>          at sun.awt.windows.WToolkit.eventLoop(Native Method)
>          at sun.awt.windows.WToolkit.run(WToolkit.java:299)
>          at java.lang.Thread.run(Thread.java:722)
>
> "Java2D Disposer" daemon prio=10 tid=0x04e04400 nid=0x478 in
> Object.wait() [0x05b0f000]
>     java.lang.Thread.State: WAITING (on object monitor)
>     JavaThread state: _thread_blocked
> Thread: 0x04e04400  [0x478] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>          at java.lang.Object.wait(Native Method)
>          - waiting on<0x156847b0>  (a java.lang.ref.ReferenceQueue$Lock)
>          at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
>          - locked<0x156847b0>  (a java.lang.ref.ReferenceQueue$Lock)
>          at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
>          at sun.java2d.Disposer.run(Disposer.java:145)
>          at java.lang.Thread.run(Thread.java:722)
>
> "Service Thread" daemon prio=6 tid=0x04cf8800 nid=0x1bb8 runnable
> [0x00000000]
>     java.lang.Thread.State: RUNNABLE
>     JavaThread state: _thread_blocked
> Thread: 0x04cf8800  [0x1bb8] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>
> "C1 CompilerThread0" daemon prio=10 tid=0x04cf2800 nid=0x598 waiting on
> condition [0x00000000]
>     java.lang.Thread.State: RUNNABLE
>     JavaThread state: _thread_blocked
> Thread: 0x04cf2800  [0x598] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>
> "Attach Listener" daemon prio=10 tid=0x04cee000 nid=0x108 runnable
> [0x00000000]
>     java.lang.Thread.State: RUNNABLE
>     JavaThread state: _thread_blocked
> Thread: 0x04cee000  [0x108] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>
> "Signal Dispatcher" daemon prio=10 tid=0x04ceac00 nid=0x1678 waiting on
> condition [0x00000000]
>     java.lang.Thread.State: RUNNABLE
>     JavaThread state: _thread_blocked
> Thread: 0x04ceac00  [0x1678] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>
> "Finalizer" daemon prio=8 tid=0x04c35c00 nid=0x12b4 in Object.wait()
> [0x04fef000]
>     java.lang.Thread.State: WAITING (on object monitor)
>     JavaThread state: _thread_blocked
> Thread: 0x04c35c00  [0x12b4] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>          at java.lang.Object.wait(Native Method)
>          - waiting on<0x15684a78>  (a java.lang.ref.ReferenceQueue$Lock)
>          at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
>          - locked<0x15684a78>  (a java.lang.ref.ReferenceQueue$Lock)
>          at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
>          at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)
>
> "Reference Handler" daemon prio=10 tid=0x04c30c00 nid=0xd48 in
> Object.wait() [0x0100f000]
>     java.lang.Thread.State: WAITING (on object monitor)
>     JavaThread state: _thread_blocked
> Thread: 0x04c30c00  [0xd48] State: _at_safepoint _has_called_back 0
> _at_poll_safepoint 0
>     JavaThread state: _thread_blocked
>          at java.lang.Object.wait(Native Method)
>          - waiting on<0x15684b00>  (a java.lang.ref.Reference$Lock)
>          at java.lang.Object.wait(Object.java:502)
>          at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:142)
>          - locked<0x15684b00>  (a java.lang.ref.Reference$Lock)
>
> "VM Thread" prio=10 tid=0x00f9fc00 nid=0x1a38 runnable
>
> "VM Periodic Task Thread" prio=10 tid=0x04d09c00 nid=0x1aa0 waiting on
> condition
>
>
> Compiler thread printing unimplemented.
>
> JNI global references: 569
>
> Heap
>   def new generation   total 13952K, used 13140K [0x10030000, 0x10f50000,
> 0x15580000)
>    eden space 12416K,  98% used [0x10030000, 0x10c2e050, 0x10c50000)
>    from space 1536K,  56% used [0x10c50000, 0x10d27328, 0x10dd0000)
>    to   space 1536K,   0% used [0x10dd0000, 0x10dd0000, 0x10f50000)
>   tenured generation   total 30860K, used 19177K [0x15580000, 0x173a3000,
> 0x20030000)
>     the space 30860K,  62% used [0x15580000, 0x1683a478, 0x1683a600,
> 0x173a3000)
>   compacting perm gen  total 12288K, used 11265K [0x20030000, 0x20c30000,
> 0x24030000)
>     the space 12288K,  91% used [0x20030000, 0x20b30568, 0x20b30600,
> 0x20c30000)
> No shared spaces configured.
>
>
> C:\OpenJDK\jdk8\build\windows-i586-fastdebug>



More information about the awt-dev mailing list