Avoid appending an empty slot to an user data array when user_data is NULL.

Otherwise, calling cairo_set_user_data(cr, key, 0, 0) many times
causes a long user data array, almost all of whose slots are empty.
It leads to unnecessarily much memory consumption and long execution time of
cairo_set_user_data(cr, key, 0, 0) and cairo_get_user_data(cr, key) after
it.

This issue probably happens since the commit
http://cgit.freedesktop.org/cairo/commit/?id=9341c254a

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
This commit is contained in:
江頭幸路 2015-04-17 20:59:17 +09:00 committed by Bryce Harrington
parent 89942c6af0
commit 040ae0ce19

View file

@ -485,6 +485,9 @@ _cairo_user_data_array_set_data (cairo_user_data_array_t *array,
return CAIRO_STATUS_SUCCESS;
}
if (user_data == NULL)
return CAIRO_STATUS_SUCCESS;
status = _cairo_array_append (array, &new_slot);
if (unlikely (status))
return status;