[cairo] memory leak in Cairo/pixman
jslupski at juljas.net
Thu Feb 14 12:22:56 PST 2008
I've been tracing a memory leak that appears to come from Cairo.
I'm using 1.4.12, but 1.4.14 seems to be quite the same in that context.
I'm not sure if I got everything right, but this is what I found so far...
The leak seems to occur in pixman in specific condition, when
_cairo_pixman_region_init_rects is called with count=0.
When the 'region' comes directly from pixman_region_init_rects()
its 'data' is initialized with 'pixman_region_emptyData' (pixregion.c:322)
Then pixman_rect_alloc(region, 0) is called.
Because of above 'pixman_region_emptyData' region->data is not NULL,
but region->data->size is 0.
So we end up in second condition (pixregion.c:414) and allocate the new data
block 'allocData(0, ®ion->data);' but leave region->data->size at n=0.
Next time there (or on freeData) we are loosing that memory block,
since region->data->size==0 means ignore freeing region->data...
I imagine that the code should either ignore pixman_rect_alloc when n==0
or add 'if(!n) n++;' just below 'else if (!region->data->size)'
(pixregion.c:414) in pixman_rect_alloc.
Hope I was clear enough, but let me know if not...
_ _ _ _ _____________________________________________
| |_| |\ | S L U P S K I jslupski at juljas.net
|_| | | | \| http://juljas.net/
More information about the cairo