Does anyone have any thoughts about this? If we were to make up a patch, would you take it?
I did get an email about how this should all be single threaded on an event dispatcher thread, to which I would reply: 1) If it is all supposed to be single threaded, then there shouldn't be any locks in it to cause a deadlock, and 2) This is in the font code, and you can use fonts for things other than drawing to the screen (in this case, they are trying to render a PDF). Jeremy On Wed, Sep 23, 2009 at 5:16 PM, Jeremy Manson <[email protected]> wrote: > Hi 2d folks, > > We have an application running on OpenJDK6 that seems to be > deadlocking in SunGraphicsEnvironment. I found it rather difficult to > write a cut-down reproduction, but the errant lock acquisition is on > line 482 of SunGraphicsEnvironment.java.: > > http://hg.openjdk.java.net/jdk6/jdk6-gate/jdk/file/f9fa5c538031/src/share/classes/sun/java2d/SunGraphicsEnvironment.java > > After the lock is acquired, it goes on to call > FontManager.initialiseDeferredFonts() on line 467, which acquires the > other lock. It looks as if you might be able to move the lock > acquisition from line 462 to 468, which would eliminate the deadlock. > The code looks pretty similar in recent OpenJDK7 builds (although the > line numbers are changed). > > The relevant stacks follow. It seems like a pretty easy fix for a > pretty nasty problem. Any chance someone could take a look? Thanks! > > Thread 1: > sun.font.FontManager.initialiseDeferredFonts(FontManager.java:791) > sun.java2d.SunGraphicsEnvironment.loadFonts(SunGraphicsEnvironment.java:467) > sun.awt.X11GraphicsEnvironment.loadFonts(X11GraphicsEnvironment.java:885) > sun.font.FontManager.findFont2D(FontManager.java:1995) > java.awt.Font.getFont2D(Font.java:473) > java.awt.Font.getFontName(Font.java:1221) > java.awt.Font.getFontName(Font.java:1203) > > Thread 2: > sun.java2d.SunGraphicsEnvironment.loadFonts(SunGraphicsEnvironment.java:463) > sun.awt.X11GraphicsEnvironment.loadFonts(X11GraphicsEnvironment.java:885) > sun.font.FontManager.findFont2D(FontManager.java:1995) > sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) > sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) > sun.font.FontManager.findJREDeferredFont(FontManager.java:875) > sun.font.FontManager.findDeferredFont(FontManager.java:912) > <snip lots of recursion> > sun.font.FontManager.findFont2D(FontManager.java:1904) > sun.font.FontManager.findFont2D(FontManager.java:1865) > java.awt.Font.getFont2D(Font.java:473) > java.awt.Font.getFontName(Font.java:1221) > java.awt.Font.getFontName(Font.java:1203) >
