From 040ae0ce1934ac27c6394dc74405faad34cd5913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E9=A0=AD=E5=B9=B8=E8=B7=AF?= Date: Fri, 17 Apr 2015 20:59:17 +0900 Subject: [PATCH] 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 --- src/cairo-array.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cairo-array.c b/src/cairo-array.c index 4f3c082ff..58c9a388f 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;