From: Dan Winship Date: Sun, 6 Sep 2009 17:54:50 +0000 (-0400) Subject: Call element_free_func when shrinking array with g_ptr_array_set_size X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=bc1dd5cf11dc920ff44d51051e1e695b0b8ea421;p=dana%2Fcg-glib.git Call element_free_func when shrinking array with g_ptr_array_set_size --- diff --git a/glib/garray.c b/glib/garray.c index 8cb6e1d8..b4390001 100644 --- a/glib/garray.c +++ b/glib/garray.c @@ -618,12 +618,8 @@ g_ptr_array_set_size (GPtrArray *farray, for (i = array->len; i < length; i++) array->pdata[i] = NULL; } - if (G_UNLIKELY (g_mem_gc_friendly) && length < array->len) - { - int i; - for (i = length; i < array->len; i++) - array->pdata[i] = NULL; - } + else if (length < array->len) + g_ptr_array_remove_range (farray, length, array->len - length); array->len = length; } diff --git a/glib/tests/array-test.c b/glib/tests/array-test.c index 3572ba39..86308e02 100644 --- a/glib/tests/array-test.c +++ b/glib/tests/array-test.c @@ -186,9 +186,11 @@ pointer_array_free_func (void) g_ptr_array_add (gparray, s); g_assert (g_ptr_array_remove (gparray, s)); g_assert_cmpint (num_free_func_invocations, ==, 2); + g_ptr_array_set_size (gparray, 1); + g_assert_cmpint (num_free_func_invocations, ==, 3); g_ptr_array_ref (gparray); g_ptr_array_unref (gparray); - g_assert_cmpint (num_free_func_invocations, ==, 2); + g_assert_cmpint (num_free_func_invocations, ==, 3); g_ptr_array_unref (gparray); g_assert_cmpint (num_free_func_invocations, ==, 4);