[OpenJDK 2D-Dev] Deadlock in SunGraphicsEnvironment / FontManager?
Jeremy Manson
jeremymanson at google.com
Thu Sep 24 00:16:57 UTC 2009
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)
More information about the 2d-dev
mailing list