[cairo] Crash in 1.8.6 win32 with PDF surface

Darren Gallagher dazzag at gmail.com
Fri Apr 24 09:35:48 PDT 2009


Hi,

I'm afraid this still crashes.  Stack trace shows crash originating from
cairo_surface_destroy() now rather than cairo_destroy()

     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=0x0012f3e8)  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=0x0012f684)
Line 3451 + 0xc bytes    C

libcairod.dll!_cairo_pdf_surface_emit_unscaled_font_subset(_cairo_scaled_font_subset
* font_subset=0x0012f684, void * closure=0x00436fe0)  Line 3722 + 0xd
bytes    C
     libcairod.dll!_cairo_sub_font_collect(void * entry=0x0043af78, void *
closure=0x0012f7d0)  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
     hellocairo.exe!main(int argc=2, char * * argv=0x00436f58)  Line 50 +
0xc bytes    C
     hellocairo.exe!__tmainCRTStartup()  Line 597 + 0x19 bytes    C
     hellocairo.exe!mainCRTStartup()  Line 414    C
     kernel32.dll!7c817077()

Thanks..




2009/4/24 Gerdus van Zyl <gerdusvanzyl at gmail.com>

> 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.
>
>
> 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
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cairographics.org/archives/cairo/attachments/20090424/1da9ab2d/attachment-0001.htm 


More information about the cairo mailing list