[cairo-commit] src/cairo-array.c

Bryce Harrington bryce at kemper.freedesktop.org
Mon Apr 20 17:18:08 PDT 2015


 src/cairo-array.c |    3 +++
 1 file changed, 3 insertions(+)

New commits:
commit 040ae0ce1934ac27c6394dc74405faad34cd5913
Author: 江頭幸路 <koji.egashira at access-company.com>
Date:   Fri Apr 17 20:59:17 2015 +0900

    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 at osg.samsung.com>

diff --git a/src/cairo-array.c b/src/cairo-array.c
index 4f3c082..58c9a38 100644
--- a/src/cairo-array.c
+++ b/src/cairo-array.c
@@ -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;


More information about the cairo-commit mailing list