[cairo] Crash in 1.8.6 win32 with PDF surface

Darren Gallagher dazzag at gmail.com
Fri Apr 24 15:23:19 PDT 2009


I forgot the mention that the same code compiled against 1.8.6 works without
problem on linux.  So I'm pretty sure that there is nothing wrong with the
sample code itself.

So I've tried both:

cairo_surface_destroy(surface);
cairo_destroy(cr);
and

cairo_destroy(cr);
cairo_surface_destroy(surface);

and they both crash.   What next?

Thanks

Daz


2009/4/24 Behdad Esfahbod <behdad at behdad.org>

> On 04/24/2009 11:59 AM, Gerdus van Zyl wrote:
>
>> Try reversing the lines:
>>     cairo_surface_destroy(surface);
>>     cairo_destroy(cr);
>>
>> destroying the surface before the context looks suspect. and when
>> working with PDF you might want a cairo_surface_finish before
>> destroying.
>>
>
> The context has a reference to the surface.  And _finish should be called
> automatically *if* the last reference to the surface is dropped.  So,
> calling it would be a good test to see if that's the problem.
>
> behdad
>
>
>  On Fri, Apr 24, 2009 at 4:17 PM, Darren Gallagher<dazzag at gmail.com>
>>  wrote:
>>
>>> Using 1.8.6 on windows (with pixman 0.15.2).  Built using instructions
>>> here:
>>>
>>> http://www.williamcyap.com/software/cairo-lib/compiling-cairo-for-windows.xhtml
>>>
>>> produces a crash witin cairo_destroy() somewhere.
>>>
>>> The code is as follows:
>>>
>>> #include<cairo.h>
>>> #include<cairo-pdf.h>
>>>
>>> int main (int argc, char *argv[])
>>> {
>>>     cairo_surface_t *surface;
>>>     cairo_t *cr;
>>>
>>>     surface = cairo_pdf_surface_create ("hellocairo.pdf" , 504, 648);
>>>     cr = cairo_create (surface);
>>>     cairo_set_source_rgb(cr, 0, 0, 0);
>>>     cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL,
>>> CAIRO_FONT_WEIGHT_NORMAL);
>>>     cairo_set_font_size (cr, 40.0);
>>>     cairo_move_to(cr, 10.0, 50.0);
>>>     cairo_show_text(cr, "Hello, Cairo!");
>>>     cairo_show_page(cr);
>>>     cairo_surface_destroy(surface);
>>>     cairo_destroy(cr);
>>>
>>>     return 0;
>>> }
>>>
>>> the stack is as follows:
>>>
>>>      ntdll.dll!7c90120e()
>>>      [Frames below may be incorrect and/or missing, no symbols loaded for
>>> ntdll.dll]
>>>      ntdll.dll!7c96c201()
>>>      ntdll.dll!7c96c63e()
>>>      ntdll.dll!7c9603b0()
>>>      kernel32.dll!7c85f8d7()
>>>      msvcr80d.dll!_CrtIsValidHeapPointer(const void *
>>> pUserData=0x00955c50)
>>> Line 2072    C++
>>>      msvcr80d.dll!_free_dbg_nolock(void * pUserData=0x00955c50, int
>>> nBlockUse=1)  Line 1279 + 0x9 bytes    C++
>>>      msvcr80d.dll!_free_dbg(void * pUserData=0x00955c50, int nBlockUse=1)
>>> Line 1220 + 0xd bytes    C++
>>>      msvcr80d.dll!free(void * pUserData=0x00955c50)  Line 1178 + 0xb
>>> bytes    C++
>>>      libcairod.dll!_cairo_truetype_subset_fini(_cairo_truetype_subset *
>>> subset=0x0012f22c)  Line 1171 + 0xe bytes    C
>>>
>>>
>>> libcairod.dll!_cairo_pdf_surface_emit_truetype_font_subset(_cairo_pdf_surface
>>> * surface=0x00436fe0, _cairo_scaled_font_subset * font_subset=0x0012f4c8)
>>> Line 3451 + 0xc bytes    C
>>>
>>>
>>> libcairod.dll!_cairo_pdf_surface_emit_unscaled_font_subset(_cairo_scaled_font_subset
>>> * font_subset=0x0012f4c8, void * closure=0x00436fe0)  Line 3722 + 0xd
>>> bytes    C
>>>      libcairod.dll!_cairo_sub_font_collect(void * entry=0x0043af78, void
>>> *
>>> closure=0x0012f614)  Line 578 + 0x15 bytes    C
>>>
>>>
>>> libcairod.dll!_cairo_scaled_font_subsets_foreach_internal(_cairo_scaled_font_subsets
>>> * font_subsets=0x004386b8, _cairo_status (_cairo_scaled_font_subset *,
>>> void
>>> *)* font_subset_callback=0x100b67a0, void * closure=0x00436fe0,
>>> cairo_subsets_foreach_type_t type=CAIRO_SUBSETS_FOREACH_UNSCALED)  Line
>>> 889
>>> + 0xd bytes    C
>>>
>>>
>>> libcairod.dll!_cairo_scaled_font_subsets_foreach_unscaled(_cairo_scaled_font_subsets
>>> * font_subsets=0x004386b8, _cairo_status (_cairo_scaled_font_subset *,
>>> void
>>> *)* font_subset_callback=0x100b67a0, void * closure=0x00436fe0)  Line 918
>>> +
>>> 0x13 bytes    C
>>>
>>>  libcairod.dll!_cairo_pdf_surface_emit_font_subsets(_cairo_pdf_surface *
>>> surface=0x00436fe0)  Line 3774 + 0x18 bytes    C
>>>      libcairod.dll!_cairo_pdf_surface_finish(void *
>>> abstract_surface=0x00436fe0)  Line 1195 + 0x9 bytes    C
>>>      libcairod.dll!cairo_surface_finish(_cairo_surface *
>>> surface=0x00436fe0)  Line 530 + 0x10 bytes    C
>>>      libcairod.dll!_cairo_paginated_surface_finish(void *
>>> abstract_surface=0x00433998)  Line 172 + 0xf bytes    C
>>>      libcairod.dll!cairo_surface_finish(_cairo_surface *
>>> surface=0x00433998)  Line 530 + 0x10 bytes    C
>>>      libcairod.dll!cairo_surface_destroy(_cairo_surface *
>>> surface=0x00433998)  Line 435 + 0x9 bytes    C
>>>      libcairod.dll!_cairo_gstate_fini(_cairo_gstate * gstate=0x00438a30)
>>> Line 205 + 0xf bytes    C
>>>      libcairod.dll!cairo_destroy(_cairo * cr=0x00438a10)  Line 228 + 0xc
>>> bytes    C
>>>
>>>>     hellocairo.exe!main(int argc=2, char * * argv=0x00436f58)  Line 49 +
>>>> 0xc bytes    C
>>>>
>>>      hellocairo.exe!__tmainCRTStartup()  Line 597 + 0x19 bytes    C
>>>      hellocairo.exe!mainCRTStartup()  Line 414    C
>>>      kernel32.dll!7c817067()
>>>
>>> Any help appreciated.
>>>
>>> Thanks
>>>
>>> Daz
>>>
>>>
>>> _______________________________________________
>>> cairo mailing list
>>> cairo at cairographics.org
>>> http://lists.cairographics.org/mailman/listinfo/cairo
>>>
>>>  _______________________________________________
>> cairo mailing list
>> cairo at cairographics.org
>> http://lists.cairographics.org/mailman/listinfo/cairo
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cairographics.org/archives/cairo/attachments/20090424/b11e4d52/attachment.html 


More information about the cairo mailing list