Deadlock during JOGL initialization
Posted by toffegast on
URL: https://forum.jogamp.org/Deadlock-during-JOGL-initialization-tp4025625.html
Hi guys,
When deploying my applet with JOGL RC9, initialization of the applet freezes sometimes. It seems to happen just when the GLCanvas is set visible for the first time. It happens only under certain circumstances (computer, browser, type of embedding, deployment), but there is no pattern. It is repeatable however.
I fired up VisualVM to have a look and it reported a deadlock:
Found one Java-level deadlock:
=============================
"SysExecutionThead":
waiting for ownable synchronizer 0x1f315930, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "TimerQueue"
"TimerQueue":
waiting for ownable synchronizer 0x1f31f0e0, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "AWT-EventQueue-2"
"AWT-EventQueue-2":
waiting to lock monitor 0x04adf364 (object 0x1f605ed0, a sun.awt.PostEventQueue),
which is held by "TimerQueue"
Java stack information for the threads listed above:
===================================================
"SysExecutionThead":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x1f315930> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.lock(Unknown Source)
at sun.awt.SunToolkit.flushPendingEvents(Unknown Source)
at java.awt.EventQueue.postEvent(Unknown Source)
at java.awt.EventQueue.invokeLater(Unknown Source)
at javax.swing.SwingUtilities.invokeLater(Unknown Source)
at com.sun.deploy.uitoolkit.impl.awt.ui.SwingConsoleWindow$26.execute(Unknown Source)
at sun.plugin.util.PluginSysUtil$SysExecutionThread.run(Unknown Source)
"TimerQueue":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x1f31f0e0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.lock(Unknown Source)
at java.awt.EventQueue.postEventPrivate(Unknown Source)
at java.awt.EventQueue.postEvent(Unknown Source)
at sun.awt.PostEventQueue.flush(Unknown Source)
- locked <0x1f605ed0> (a sun.awt.PostEventQueue)
at sun.awt.SunToolkit.flushPendingEvents(Unknown Source)
at java.awt.EventQueue.postEvent(Unknown Source)
at java.awt.EventQueue.invokeLater(Unknown Source)
at javax.swing.SwingUtilities.invokeLater(Unknown Source)
at javax.swing.Timer$1.run(Unknown Source)
at javax.swing.Timer$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at javax.swing.Timer.post(Unknown Source)
at javax.swing.TimerQueue.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"AWT-EventQueue-2":
at sun.awt.PostEventQueue.noEvents(Unknown Source)
- waiting to lock <0x1f605ed0> (a sun.awt.PostEventQueue)
at sun.awt.SunToolkit.isPostEventQueueEmpty(Unknown Source)
at java.awt.EventQueue.detachDispatchThread(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
I can't make anything of the stack traces above, as I don't see any JOGL methods.
Do the JOGL developers know what is going on? Is there any way in which I can further research this or add to the solution? Note that I tried to use -Djnlp.nativewindow.debug=all -Djnlp.jogl.debug=all but can't get it to work with an applet in a browser.
Thanks!