LOCAL: Not enough space in GDI heap

Fabian Cenedese Cenedese at indel.ch
Thu Feb 5 09:26:36 CST 2004


>When trying to run a program I get these messages:
>
>err:local:LOCAL_GetBlock not enough space in GDI heap 10c7 for 116 bytes
>trace:ole:OLEFontImpl_get_hFont Returning (nil)
>wine: Unhandled exception (thread 0009), starting debugger...
>
>I had a look at this LOCAL_GetBlock function. There is already code
>with some FIXME comments, but it's all #ifdef 0'd out. So that means
>it's not tested or not even supposed to work. Is there something else
>I could do to increase my GDI heap?

I think that wouldn't help much. I made more traces to find this:

trace:font:DumpGdiFontList ---------- gdiFont Cache ----------
trace:gdi:GetObjectW 0xd82 92 0x408bf718
trace:gdi:GDI_GetObjPtr (0xd82): enter 2
trace:gdi:GDI_ReleaseObj (0xd82): leave 2
trace:font:DumpGdiFontList gdiFont=0x40383250  hfont=0xd82 (L"MS Sans Serif")
trace:gdi:GetObjectW 0xa6 92 0x408bf718
trace:gdi:GDI_GetObjPtr (0xa6): enter 2
trace:gdi:GDI_ReleaseObj (0xa6): leave 2
trace:font:DumpGdiFontList gdiFont=0x40378f30  hfont=0xa6 (L"System")

Looks good, two fonts, but then later:

trace:font:DumpGdiFontList ---------- gdiFont Cache ----------
trace:gdi:GetObjectW 0x14c6 92 0x408bf718
trace:gdi:GDI_GetObjPtr (0x14c6): enter 2
trace:gdi:GDI_ReleaseObj (0x14c6): leave 2
trace:font:DumpGdiFontList gdiFont=0x40385938  hfont=0x14c6 (L"MS Sans Serif")
trace:gdi:GetObjectW 0xd82 92 0x408bf718
trace:gdi:GDI_GetObjPtr (0xd82): enter 2
trace:gdi:GDI_ReleaseObj (0xd82): leave 2
trace:font:DumpGdiFontList gdiFont=0x40383250  hfont=0xd82 (L"MS Sans Serif")
trace:gdi:GetObjectW 0xa6 92 0x408bf718
trace:gdi:GDI_GetObjPtr (0xa6): enter 2
trace:gdi:GDI_ReleaseObj (0xa6): leave 2
trace:font:DumpGdiFontList gdiFont=0x40378f30  hfont=0xa6 (L"System")

Already two times MS Sans Serif...


trace:font:DumpGdiFontList ---------- gdiFont Cache ----------
trace:gdi:GetObjectW 0x23d6 92 0x408bf70c
trace:gdi:GDI_GetObjPtr (0x23d6): enter 2
trace:gdi:GDI_ReleaseObj (0x23d6): leave 2
trace:font:DumpGdiFontList gdiFont=0x403b06f8  hfont=0x23d6 (L"MS Sans Serif")
...
all in all 32 fonts MS Sans Serif.
...
trace:gdi:GetObjectW 0xa6 92 0x408bf70c
trace:gdi:GDI_GetObjPtr (0xa6): enter 2
trace:gdi:GDI_ReleaseObj (0xa6): leave 2
trace:font:DumpGdiFontList gdiFont=0x40378f30  hfont=0xa6 (L"System")



trace:font:DumpGdiFontList ---------- gdiFont Cache ----------
trace:gdi:GetObjectW 0x2dfe 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0x2dfe): enter 2
trace:gdi:GDI_ReleaseObj (0x2dfe): leave 2
trace:font:DumpGdiFontList gdiFont=0x403dabf8  hfont=0x2dfe (L"MS Sans Serif")
...
32 Fonts MS Sans Serif
...
trace:gdi:GetObjectW 0x23e6 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0x23e6): enter 2
trace:gdi:GDI_ReleaseObj (0x23e6): leave 2
trace:font:DumpGdiFontList gdiFont=0x403a3b80  hfont=0x23e6 (L"Arial")
trace:gdi:GetObjectW 0x23d6 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0x23d6): enter 2
trace:gdi:GDI_ReleaseObj (0x23d6): leave 2
trace:font:DumpGdiFontList gdiFont=0x403b06f8  hfont=0x23d6 (L"MS Sans Serif")
...
another 32 Fonts MS Sans Serif
...
trace:gdi:GetObjectW 0xa6 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0xa6): enter 2
trace:gdi:GDI_ReleaseObj (0xa6): leave 2
trace:font:DumpGdiFontList gdiFont=0x40378f30  hfont=0xa6 (L"System")


Or some time much later even this:

trace:font:DumpGdiFontList ---------- gdiFont Cache ----------
trace:gdi:GetObjectW 0xf48e 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0xf48e): enter 2
trace:gdi:GDI_ReleaseObj (0xf48e): leave 2
trace:font:DumpGdiFontList gdiFont=0x47d7c160  hfont=0xf48e (L"MS Sans Serif")
...
180 Fonts MS Sans Serif
...
trace:gdi:GetObjectW 0x9a82 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0x9a82): enter 2
trace:gdi:GDI_ReleaseObj (0x9a82): leave 2
trace:font:DumpGdiFontList gdiFont=0x4400be90  hfont=0x9a82 (L"Courier")
trace:gdi:GetObjectW 0x9a7a 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0x9a7a): enter 2
trace:gdi:GDI_ReleaseObj (0x9a7a): leave 2
trace:font:DumpGdiFontList gdiFont=0x4400a678  hfont=0x9a7a (L"MS Sans Serif")
...
another 208 Fonts MS Sans Serif
...
trace:gdi:GetObjectW 0x23e6 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0x23e6): enter 2
trace:gdi:GDI_ReleaseObj (0x23e6): leave 2
trace:font:DumpGdiFontList gdiFont=0x403a3b80  hfont=0x23e6 (L"Arial")
trace:gdi:GetObjectW 0x23d6 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0x23d6): enter 2
trace:gdi:GDI_ReleaseObj (0x23d6): leave 2
trace:font:DumpGdiFontList gdiFont=0x403b06f8  hfont=0x23d6 (L"MS Sans Serif")
...
another 32 Fonts MS Sans Serif
...
trace:gdi:GetObjectW 0xa6 92 0x408bf6e8
trace:gdi:GDI_GetObjPtr (0xa6): enter 2
trace:gdi:GDI_ReleaseObj (0xa6): leave 2
trace:font:DumpGdiFontList gdiFont=0x40378f30  hfont=0xa6 (L"System")


Now is this an error in my application (VB6 with lots of controls and ocx's)
or one in wine? Does my app really create so many fonts or should each
only appear once in this list because they're all the same? They do have
different handles/addresses but that could be wine too. Of course it works
on Windows but that could just be pure luck :)
Is there some way to tell on Windows if it really uses so much GDI heap?
Being a VB app it's not that easy to debug low-level.

Thanks

bye  Fabi





More information about the wine-devel mailing list