Today I discovered deadlock on linux when initializing fonts. I tried to run 
World Wind for Java demo applet.

I reported bug to bugs.sun.com. I don't think there will be fast response/fix.

JConsole dealock stacktraces are in attachment. There are several problems.

*) synchronization in 
"sun.java2d.SunGraphicsEnvironment.loadFonts(SunGraphicsEnvironment.java:425)- 
locked java.lang.str...@39ea58"  against String that can be "intern"

*) several lines above "loadFonts" is simple getter with description that same 
variable used for synchronization can be <null>  -  !!! synchronization can't 
be with null monitor !!!

*) SunGraphicsEnvironment.loadFonts in synchonized block calls native 
sun.font.FontManager.getFontPath - that can lead to deadlock according to "Sun" 
information

*) there is waiting awtLock on javawsApplicationMain and AWT-EventQueue-0 is 
trying to SunGraphicsEnvironment.loadFonts

I hope that this help you fix this problem.

  Martin

Name: AWT-EventQueue-0
State: BLOCKED on java.lang.str...@39ea58 owned by: javawsApplicationMain
Total blocked: 11  Total waited: 6

Stack trace: 
sun.java2d.SunGraphicsEnvironment.loadFonts(SunGraphicsEnvironment.java:419)
sun.font.FontManager.findFont2D(FontManager.java:2125)
java.awt.Font.getFont2D(Font.java:455)
java.awt.Font.getNumGlyphs(Font.java:1699)
com.sun.opengl.util.j2d.TextRenderer.<init>(TextRenderer.java:301)
gov.nasa.worldwind.util.OGLTextRenderer.<init>(Unknown Source)
gov.nasa.worldwind.util.OGLTextRenderer.getOrCreateTextRenderer(Unknown Source)
gov.nasa.worldwind.util.OGLTextRenderer.getOrCreateTextRenderer(Unknown Source)
gov.nasa.worldwind.layers.ScalebarLayer.drawLabel(Unknown Source)
gov.nasa.worldwind.layers.ScalebarLayer.draw(Unknown Source)
gov.nasa.worldwind.layers.ScalebarLayer$OrderedIcon.render(Unknown Source)
gov.nasa.worldwind.AbstractSceneController.draw(Unknown Source)
gov.nasa.worldwind.BasicSceneController.doRepaint(Unknown Source)
gov.nasa.worldwind.AbstractSceneController.repaint(Unknown Source)
gov.nasa.worldwind.WorldWindowGLAutoDrawable.doDisplay(Unknown Source)
gov.nasa.worldwind.WorldWindowGLAutoDrawable.display(Unknown Source)
com.sun.opengl.impl.GLDrawableHelper.display(GLDrawableHelper.java:78)
javax.media.opengl.GLCanvas$DisplayAction.run(GLCanvas.java:435)
com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:194)
javax.media.opengl.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:412)
javax.media.opengl.GLCanvas.display(GLCanvas.java:244)
javax.media.opengl.GLCanvas.paint(GLCanvas.java:277)
javax.media.opengl.GLCanvas.update(GLCanvas.java:354)
sun.awt.RepaintArea.updateComponent(RepaintArea.java:239)
sun.awt.X11.XRepaintArea.updateComponent(XRepaintArea.java:43)
sun.awt.RepaintArea.paint(RepaintArea.java:216)
sun.awt.X11.XComponentPeer.handleEvent(XComponentPeer.java:695)
java.awt.Component.dispatchEventImpl(Component.java:4706)
java.awt.Component.dispatchEvent(Component.java:4460)
java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


---
Name: javawsApplicationMain
State: WAITING on java.util.concurrent.locks.reentrantlock$nonfairs...@e8c7db 
owned by: AWT-EventQueue-0
Total blocked: 2  Total waited: 3

Stack trace: 
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114)
java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
sun.awt.SunToolkit.awtLock(SunToolkit.java:236)
sun.font.FontManager.getFontPath(Native Method)
   - locked java.lang.cl...@18fa85
sun.java2d.SunGraphicsEnvironment.getPlatformFontPath(SunGraphicsEnvironment.java:385)
sun.java2d.SunGraphicsEnvironment$3.run(SunGraphicsEnvironment.java:429)
java.security.AccessController.doPrivileged(Native Method)
sun.java2d.SunGraphicsEnvironment.loadFonts(SunGraphicsEnvironment.java:425)
   - locked java.lang.str...@39ea58
sun.font.FontManager.findFont2D(FontManager.java:2125)
sun.font.FontManager.findFont2D(FontManager.java:1985)
java.awt.Font.getFont2D(Font.java:455)
java.awt.Font.getNumGlyphs(Font.java:1699)
com.sun.opengl.util.j2d.TextRenderer.<init>(TextRenderer.java:301)
com.sun.opengl.util.j2d.TextRenderer.<init>(TextRenderer.java:244)
gov.nasa.worldwind.render.SurfaceText.getTextRenderer(Unknown Source)
gov.nasa.worldwind.render.SurfaceText.updateTextBounds(Unknown Source)
gov.nasa.worldwind.render.SurfaceText.setText(Unknown Source)
gov.nasa.worldwind.render.SurfaceText.<init>(Unknown Source)
gov.nasa.worldwind.examples.SurfaceObjects$AppFrame.buildShapesLayer(Unknown 
Source)
gov.nasa.worldwind.examples.SurfaceObjects$AppFrame.<init>(Unknown Source)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
gov.nasa.worldwind.examples.ApplicationTemplate.start(Unknown Source)
gov.nasa.worldwind.examples.SurfaceObjects.main(Unknown Source)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.sun.javaws.Launcher.executeApplication(Launcher.java:1748)
com.sun.javaws.Launcher.executeMainClass(Launcher.java:1694)
com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1480)
com.sun.javaws.Launcher.run(Launcher.java:130)
java.lang.Thread.run(Thread.java:619)

Reply via email to