I have narrowed the issue down to a difference in behaviour between Windows and Wine.
��NONCLIENTMETRICS�ncm; ��memset(&ncm,�0,�sizeof(NONCLIENTMETRICS)); ��ncm.cbSize�=�sizeof(NONCLIENTMETRICS); ��VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS,�sizeof(NONCLIENTMETRICS),�&ncm,�0));
I used the font's returned from this call for drawing text and this caused the crash.
The problem is that I upgraded to VS2010 and changed the target to WINVER=0x600.
This means that I needed to change my code to the following.
��NONCLIENTMETRICS�ncm;
��memset(&ncm,�0,�sizeof(NONCLIENTMETRICS));
��ncm.cbSize�=�sizeof(NONCLIENTMETRICS);
#if(WINVER�>=�0x0600)�
��OSVERSIONINFO�osvi;�
��memset(&osvi,0,sizeof(osvi));�
��osvi.dwOSVersionInfoSize�=�sizeof(osvi);�
��GetVersionEx(&osvi);�
��if�(osvi.dwMajorVersion�<�6)�
����ncm.cbSize�-=�sizeof(ncm.iPaddedBorderWidth);�
#endif
��VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS,�sizeof(NONCLIENTMETRICS),�&ncm,�0));
Note: On windows my application does not actually crash or stop working with my original code and the text is displayed at a size I would kind of expect it to be.
Thanks for the suggestions.I've narrowed one of the issues down to�WineEngGetGlyphOutline in�dlls/gdi32/freetype.c.The pitch is 6640 and the height is 53003. This means that a buffer of ~335Mb has been allocated and then memset.This is where the slow down is�occurring (because of the memset). I suspect the resultant crash is also because of this.I would suggest that limits need to be placed on the maximum pitch and height.
I do not however believe that this is the root cause just one of the symptoms.�On 5 October 2011 18:37, Marcus Meissner <marcus@jet.franken.de> wrote:
On Wed, Oct 05, 2011 at 04:53:18PM +0100, Damian Dixon wrote:To get a backtrace and be able to dump some datastructures, run with
> Hi,
>
> I was attempting to use Wine 1.3.29 (in OpenSUSE 11.4 x86) and because of
> issues pulled the source from git last night and still have problems.
>
> I am having performance issues with DrawText (5 odd seconds to draw a simple
> string) and the occasional X Error and crash.
>
> The X Error is consistent and is as follows:
>
> fixme:advapi:SetSecurityInfo stub
> X Error of failed request: �BadLength (poly request too large or internal
> Xlib length error)
> � Major opcode of failed request: �151 (RENDER)
> � Minor opcode of failed request: �17 (RenderCreateGlyphSet)
> � Serial number of failed request: �41091
> � Current serial number in output stream: �41571
> Process of pid=0023 has terminated
>
>
> The crash less consistent but is dependent upon the amount of text I attempt
> to draw.
>
> The last version I know this worked in was 1.1.39.
>
> I've a few things to still try out before I attempt to create an RBT.
WINEDEBUG=+synchronous wine foo.exe
This will bring it into the debugger once the condition happens.
CIao, MArcus