Comment 7 for bug 1199571

Revision history for this message
Alexey Borzenkov (snaury) wrote : Re: compiz crashed with SIGSEGV in af_latin_hints_compute_edges()

I looked at the implementation of cairo-ft-font.c and it seems that there are huge multi-threading violations in cairo. The reason is that FreeType API documentation clearly states:

In multi-threaded applications, make sure that the same FT_Library object or any of its children doesn't get accessed in parallel.

Cairo initializes FT_Library for its font map and there's a lock for that, however it's only used for font map manipulations, the actual FT_ library calls are completely unprotected with that lock, although they should be! What adds to the injury is that cairo-ft-font.c even has this comment on one of its functions:

You must be careful when using this function in a library or in a
threaded application, because freetype's design makes it unsafe to
call freetype functions simultaneously from multiple threads, (even
if using distinct FT_Face objects)

Too bad they don't follow their own advice, and no wonder compiz is crashing like that. Can somebody contact upstream about this issue and make them aware of it?