[cairo] Crash in 1.8.6 win32 with PDF surface
Darren Gallagher
dazzag at gmail.com
Mon Apr 27 02:21:35 PDT 2009
Hi,
Just tried adding in the call to cairo_surface_finish(). It still
crashes. Code now as follows:
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!");
//drawDashLine(cr);
cairo_show_page(cr);
cairo_surface_finish(surface);
cairo_surface_destroy(surface);
cairo_destroy(cr);
Stack trace:
ntdll.dll!7c90120e()
[Frames below may be incorrect and/or missing, no symbols loaded for
ntdll.dll]
ntdll.dll!7c96e139()
ntdll.dll!7c96e576()
ntdll.dll!7c9622e8()
kernel32.dll!7c85f9a7()
msvcr80d.dll!_CrtIsValidHeapPointer(const void * pUserData=0x00955c48)
Line 2072 C++
msvcr80d.dll!_free_dbg_nolock(void * pUserData=0x00955c48, int
nBlockUse=1) Line 1279 + 0x9 bytes C++
msvcr80d.dll!_free_dbg(void * pUserData=0x00955c48, int nBlockUse=1)
Line 1220 + 0xd bytes C++
msvcr80d.dll!free(void * pUserData=0x00955c48) Line 1178 + 0xb
bytes C++
libcairod.dll!_cairo_truetype_subset_fini(_cairo_truetype_subset *
subset=0x0012f4c0) 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=0x0012f75c)
Line 3451 + 0xc bytes C
libcairod.dll!_cairo_pdf_surface_emit_unscaled_font_subset(_cairo_scaled_font_subset
* font_subset=0x0012f75c, void * closure=0x00436fe0) Line 3722 + 0xd
bytes C
libcairod.dll!_cairo_sub_font_collect(void * entry=0x0043af78, void *
closure=0x0012f8a8) 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
> hellocairo.exe!main(int argc=2, char * * argv=0x00436f58) Line 48 +
0xc bytes C
hellocairo.exe!__tmainCRTStartup() Line 597 + 0x19 bytes C
hellocairo.exe!mainCRTStartup() Line 414 C
kernel32.dll!7c817077()
Thanks
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/20090427/aaea8e26/attachment.html
More information about the cairo
mailing list