[cairo-bugs] [Bug 19655] New: Cairo asserts on font-face destroy (SIGABRT)
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Mon Jan 19 12:08:23 PST 2009
http://bugs.freedesktop.org/show_bug.cgi?id=19655
Summary: Cairo asserts on font-face destroy (SIGABRT)
Product: cairo
Version: 1.8.6
Platform: x86 (IA32)
URL: http://gaphor.devjavu.com/ticket/158
OS/Version: Mac OS X (All)
Status: NEW
Keywords: have-backtrace
Severity: major
Priority: high
Component: general
AssignedTo: cworth at cworth.org
ReportedBy: gaphor at gmail.com
QAContact: cairo-bugs at cairographics.org
I'm using Cairo + PyCairo + GTK+ on Mac OS X 10.5.6. When loading a large file
or in my modeling tool or doing some testing with the canvas library at a
certain point the application crashes with the following message:
Assertion failed: (CAIRO_REFERENCE_COUNT_HAS_REFERENCE
(&font_face->ref_count)), function cairo_font_face_destroy, file
cairo-font-face.c, line 191.
Abort trap (core dumped)
All stack traces produced look like this:
0 libSystem.B.dylib 0x90c53e42 __kill + 10
1 libSystem.B.dylib 0x90cc623a raise + 26
2 libSystem.B.dylib 0x90cd2679 abort + 73
3 libSystem.B.dylib 0x90cc73db __assert_rtn + 101
4 libcairo.2.dylib 0x0120e9a6 cairo_font_face_destroy +
150 (cairo-font-face.c:191)
5 libcairo.2.dylib 0x01225481
_cairo_scaled_font_fini_internal + 65 (cairo-scaled-font.c:725)
6 libcairo.2.dylib 0x012258ba cairo_scaled_font_destroy +
154 (cairo-scaled-font.c:1066)
7 libcairo.2.dylib 0x01227da3 cairo_scaled_font_create +
643 (cairo-scaled-font.c:917)
8 libcairo.2.dylib 0x012117ff
_cairo_gstate_ensure_scaled_font + 111 (cairo-gstate.c:1489)
9 libcairo.2.dylib 0x012118fe _cairo_gstate_text_to_glyphs
+ 78 (cairo-gstate.c:1531)
10 libcairo.2.dylib 0x0120ce36 cairo_text_extents + 198
(cairo.c:2983)
11 _cairo.so 0x007e331c pycairo_text_extents + 60
(pycairo-context.c:1271)
12 org.python.python 0x00239b2b PyEval_EvalFrameEx + 25131
It appears that the problem is that the ref_count of the font_face reaches 0
and then is destroyed again.
The font being destroyed seems to come from the font_map used to store scaled
donts (cairo_scaled_font_destroy).
#4 0x0120e9a6 in cairo_font_face_destroy (font_face=<value temporarily
unavailable, due to optimizations>) at cairo-font-face.c:191
191 assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE
(&font_face->ref_count));
(gdb) l
186 {
187 if (font_face == NULL ||
188 CAIRO_REFERENCE_COUNT_IS_INVALID (&font_face->ref_count))
189 return;
190
191 assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE
(&font_face->ref_count));
192
193 if (! _cairo_reference_count_dec_and_test (&font_face->ref_count))
194 return;
195
(gdb) p font_face->ref_count
$1 = {
ref_count = 0
}
(gdb) p font_face
$2 = <value temporarily unavailable, due to optimizations>
(gdb) p *font_face
$3 = {
hash_entry = {
hash = 0
},
status = CAIRO_STATUS_SUCCESS,
ref_count = {
ref_count = 0
},
user_data = {
size = 0,
num_elements = 0,
element_size = 0,
elements = 0x0,
is_snapshot = 0
},
backend = 0x0
}
IMHO this is not the desired behaviour. I haven;t been able to create a test
case that triggers this behaviour though.
Some library versions (compiled with MacPorts, although I recompiled Cairo and
PyCairo with debugging symbols):
cairo @1.8.6_2+macosx (active)
freetype @2.3.8_0+macosx (active)
gtk2 @2.14.7_0+x11 (active)
py25-cairo @1.8.0_0+darwin_9 (active)
py25-gobject @2.16.0_0+darwin_9 (active)
py25-gtk @2.12.1_0+darwin_9 (active)
python25 @2.5.4_0+darwin_9+macosx (active)
Regards,
Arjan Molenaar
http://gaphor.devjavu.com
--
Configure bugmail: http://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the cairo-bugs
mailing list