cairo_glyph_path is not multithread safe
Submitted by zadecn
Assigned to Carl Worth @cworth
Description
environment: cairo on red hat linux with GCC 3.4.5. context: use cairo_glyph_path to get halo effect.
description:
When I call the function in single thread environment, it is no problem; but in multihread when run more than 2 hours, it crashes with the GDB info:
#0 0x0000000000b1f899 in kill ()
#1 0x00000000007f4d7b in __pthread_raise () at src/ul_file.cpp:28
#2 0x0000000000b1fc63 in abort ()
#3 0x0000000000b1a39c in __assert_fail ()
#4 0x00000000006f1589 in _cairo_hash_table_remove (hash_table=Variable "hash_table" is not available.
) at cairo-hash.c:506
#5 0x00000000006d4b82 in _cairo_scaled_glyph_page_destroy (closure=Variable "closure" is not available.
) at cairo-scaled-font.c:461
#6 0x00000000006ed1ac in _cairo_cache_shrink_to_accommodate (cache=0x1426480, additional=0) at cairo-cache.c:223
#7 0x00000000006d5049 in _cairo_scaled_font_thaw_cache (scaled_font=0x2acb989780) at cairo-scaled-font.c:793
#8 0x00000000006d6a66 in _cairo_scaled_font_glyph_path (scaled_font=0x2acb989780, glyphs=0x2aab8358b0, num_glyphs=1, path=0x2acc20e9f0) at cairo-scaled-font.c:2635
#9 0x00000000006bb26d in _cairo_gstate_glyph_path (gstate=0x2acc20e6b8, glyphs=0x2acc76e210, num_glyphs=1, path=0x2acc20e9f0) at cairo-gstate.c:2061
#10 0x00000000006b2ce6 in cairo_glyph_path (cr=0x2acc20e680, glyphs=Variable "glyphs" is not available.
) at cairo.c:3548
#11 0x000000000065366b in map::(anonymous namespace)::DrawTextImpl (cr=0x2acc20e680, scaled_font=0x2ac43638e0, text=@0x2acc76e250, at=@0x2acc21fb30, desc=@0x1585ad0, angle=0.17453292519943295) at render_cairo.cpp:282
#12 0x0000000000654ae4 in map::CairoRender::DrawText (this=0x2ab0023e30, pts=0x2acc21fb30, count=Variable "count" is not available.
On my more than 10 cores, it is on the same function: cairo_glyph_path. Additionally, when I see other threads info, at least one thread run the same function.
so my question is: is cairo_glyph_path multithread safe ?
Version: 1.12.2