gst_buffer_list_remove_range_internal (list, i, 1, !was_writable);
--len;
} else {
- if (!was_writable)
+ if (!was_writable) {
+ gst_mini_object_remove_parent (GST_MINI_OBJECT_CAST (buf),
+ GST_MINI_OBJECT_CAST (list));
gst_buffer_unref (buf);
+ }
list->buffers[i] = buf_ret;
gst_mini_object_add_parent (GST_MINI_OBJECT_CAST (buf_ret),
GST_END_TEST;
+GST_START_TEST (test_foreach_modify_writeable_list)
+{
+ GstBufferList *b = gst_buffer_list_new_sized (1);
+ GstBuffer *buf;
+
+ buf = gst_buffer_new ();
+ gst_buffer_list_add (b, gst_buffer_ref (buf));
+
+ fail_unless (gst_buffer_list_is_writable (b));
+
+ gst_buffer_list_foreach (b, foreach_replace_buffer, NULL);
+
+ gst_buffer_list_unref (b);
+ gst_buffer_unref (buf);
+}
+
+GST_END_TEST;
+
static Suite *
gst_buffer_list_suite (void)
{
TCase *tc_chain = tcase_create ("general");
suite_add_tcase (s, tc_chain);
+
tcase_add_checked_fixture (tc_chain, setup, cleanup);
tcase_add_test (tc_chain, test_add_and_iterate);
tcase_add_test (tc_chain, test_remove);
tcase_add_test (tc_chain, test_new_sized_0);
tcase_add_test (tc_chain, test_multiple_mutable_buffer_references);
tcase_add_test (tc_chain, test_foreach_modify_non_writeable_list);
+ tcase_add_test (tc_chain, test_foreach_modify_writeable_list);
return s;
}