Call element_free_func when shrinking array with g_ptr_array_set_size
authorDan Winship <danw@gnome.org>
Sun, 6 Sep 2009 17:54:50 +0000 (13:54 -0400)
committerDan Winship <danw@gnome.org>
Mon, 7 Sep 2009 16:35:51 +0000 (12:35 -0400)
glib/garray.c
glib/tests/array-test.c

index 8cb6e1d..b439000 100644 (file)
@@ -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;
 }
index 3572ba3..86308e0 100644 (file)
@@ -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);