http://bugs.winehq.org/show_bug.cgi?id=5253
--- Comment #118 from Saulius K. saulius2@gmail.com 2010-08-07 05:38:53 --- I am unable to identify substitution of the font of interest.
If I only put Impact.TTF into "drive_c/windows/fonts", Diablo still crashes. Replacing the file with Arial.TTF in this dir gives me quite different +font log.
In the case of crash I see WineEngInit() is clearly being called a bit earlier in the process of wineboot.exe.
In this case "services.exe" is also started earlier than ReadFontDir() from the "winemenubuilder.exe" finds the font being tested (Impact.TTF). If I replace the font and things don't crash, then ReadFontDir() finds Arial.TTF way before "services.exe" is started.
Then there are differences in the AddFontToList() action:
0009:warn:font:AddFontToList Ignoring font ".../wine/fonts//vgasysg.fon"/(nil) 0009:trace:font:ReadFontDir Found "vgasysr.fon" in ".../wine/fonts/" 0009:trace:font:AddFontToList Loading font file ".../wine/fonts//vgasysr.fon" index 0 -0009:warn:font:AddFontToList Ignoring font ".../wine/fonts//vgasysr.fon"/(nil) +0019:trace:font:WineEngCreateFontInstance L"System", h=16, it=0, weight=400, PandF=22, charset=0 orient 0 escapement 0 0009:trace:font:ReadFontDir Found "vgasyst.fon" in ".../wine/fonts/" -0009:trace:font:AddFontToList Loading font file ".../wine/fonts//vgasyst.fon" index 0 +0019:trace:font:WineEngCreateFontInstance DC transform 1.000000 0.000000 0.000000 1.000000 +0019:trace:font:WineEngCreateFontInstance returning cached gdiFont(0x11ae28) for hFont 0x7c +0019:trace:font:X11DRV_SelectFont hdc=0x250, hfont=0x7c +0019:trace:font:X11DRV_SelectFont gdiFont = 0x11ae28 +0019:trace:font:update_font_code_page charset 0 => cp 1252 0009:warn:font:AddFontToList Ignoring font ".../wine/fonts//vgasyst.fon"/(nil) 0009:trace:font:ReadFontDir Found "vgas1255.fon" in ".../wine/fonts/" 0009:trace:font:AddFontToList Loading font file ".../wine/fonts//vgas1255.fon" index 0
0009 thread is the main thread of Diablo. 0019 thread is the main thread of explorer.exe
If 0019 are filtered out, in the case of crash we see two lines disappearing:
-0009:warn:font:AddFontToList Ignoring font ".../wine/fonts//vgasysr.fon"/(nil) -0009:trace:font:AddFontToList Loading font file ".../wine/fonts//vgasyst.fon" index 0
Seems like some interprocess race.
Or probably logging engine has eaten them up. I see quite a few broken lines in my +font logs.
load_fontconfig_fonts() was called 668 times in the case of crash. In the case of success the number is reduced to 446. This is surprising as non-crashing case generates 2x bigger log.
Could race condition be a cause of this bug?