[cairo] Fix a crash in _cairo_xlib_surface_show_glyphs

Jinghua Luo sunmoon1997 at gmail.com
Sun May 27 00:12:51 PDT 2007

  After introducing a work queue for deferred destruction of X resource, 
my firefox crashes over and over again while surfing the same page as 
before. The backtrace shows the problem is we're double freeing a glyph.
To identify the problem, I add a printf just before XRenderAddGlyphs and 
XRenerFreeGlyphs and extract following sequence:

XRenderAddGlyphs (20990204, 20069)
XRenderFreeGlyphs (20990204, 20069)
XRenderAddGlyphs (20990204, 20069)
XRenderAddGlyphs (20990204, 20069)
XRenderFreeGlyphs (20990204, 20069)
XRenderFreeGlyphs (20990204, 20069)

The sequence is out of order, obviously we'll crash at the last 
XRenderFreeGlyphs. It seems the problem while we send glyphs to server 
some pending XRenderFreeGlyphs works may be still in current display's 
work queue then if we destroy the glyph again, we'll get a similar 
sequence as above. To resolve the problem, we must be ensure there's no
pending work to free the glyph that we want to sent. The attached patch 
fixes the problem for me which I'd like to commit.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: xlib-surface-flush-workqueue-before-sending-glyph.patch
Type: text/x-patch
Size: 444 bytes
Desc: not available
Url : http://cairographics.org/archives/cairo/attachments/20070527/18ffa7fc/attachment.bin 

More information about the cairo mailing list