[cairo] 2 Coverity defects for mutex lock and resource leak

Uli Schlachter psychon at znc.in
Sun Jan 14 09:32:08 UTC 2018


Hi,

On 14.01.2018 05:24, Bryce Harrington wrote:
[...]
> ** CID 1160664:    (ORDER_REVERSAL)
> /src/cairo-scaled-font.c: 408 in _cairo_scaled_font_map_destroy()
> /src/cairo-scaled-font.c: 419 in _cairo_scaled_font_map_destroy()

Could you explain what this actually means?

"ORDER_REVERSAL" sounds like one piece of code does lock(a) lock(b)
while another does lock(b) lock(a) so you get a chance for a deadlock.
However, it points at two places locking the same mutex in the same
function?!?

> ________________________________________________________________________________________________________
> *** CID 1160664:    (ORDER_REVERSAL)
> /src/cairo-scaled-font.c: 408 in _cairo_scaled_font_map_destroy()
> 402     void
> 403     _cairo_scaled_font_map_destroy (void)
> 404     {
> 405         cairo_scaled_font_map_t *font_map;
> 406         cairo_scaled_font_t *scaled_font;
> 407     
>>>>     CID 1160664:    (ORDER_REVERSAL)
>>>>     Calling "pthread_mutex_lock" acquires lock "_cairo_scaled_font_map_mutex".
> 408         CAIRO_MUTEX_LOCK (_cairo_scaled_font_map_mutex);
> 409     
> 410         font_map = cairo_scaled_font_map;
> 411         if (unlikely (font_map == NULL)) {
> 412             goto CLEANUP_MUTEX_LOCK;
> 413         }
> /src/cairo-scaled-font.c: 419 in _cairo_scaled_font_map_destroy()
> 413         }
> 414     
> 415         scaled_font = font_map->mru_scaled_font;
> 416         if (scaled_font != NULL) {
> 417     	CAIRO_MUTEX_UNLOCK (_cairo_scaled_font_map_mutex);
> 418     	cairo_scaled_font_destroy (scaled_font);
>>>>     CID 1160664:    (ORDER_REVERSAL)
>>>>     Calling "pthread_mutex_lock" acquires lock "_cairo_scaled_font_map_mutex".
> 419     	CAIRO_MUTEX_LOCK (_cairo_scaled_font_map_mutex);
> 420         }
> 421     
> 422         /* remove scaled_fonts starting from the end so that font_map->holdovers
> 423          * is always in a consistent state when we release the mutex. */
> 424         while (font_map->num_holdovers) {
> 
> ** CID 1384409:    (RESOURCE_LEAK)
> /test/font-variations.c: 79 in test_variation()
> /test/font-variations.c: 90 in test_variation()

This one seems trivial and not all that important.

Cheers,
Uli
-- 
Happiness can't be found -- it finds you.
 - Majic


More information about the cairo mailing list