mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
gst/gstutils.c: Don't leak pad references.
Original commit message from CVS: * gst/gstutils.c: (gst_element_unlink_pads): Don't leak pad references. * tests/check/elements/fakesink.c: (GST_START_TEST): * tests/check/generic/sinks.c: (GST_START_TEST): * tests/check/generic/states.c: (GST_START_TEST): * tests/check/gst/gstbin.c: (GST_START_TEST): * tests/check/gst/gstcaps.c: (GST_START_TEST): * tests/check/gst/gstelement.c: (GST_START_TEST): * tests/check/gst/gstghostpad.c: (GST_START_TEST): * tests/check/gst/gstiterator.c: (GST_START_TEST): * tests/check/gst/gstvalue.c: (GST_START_TEST): Fix a bunch of leaks. Make generic/sinks.c use a bit less cpu by slowing the buffer rate between fakesrc and fakesink.
This commit is contained in:
parent
a53172d79d
commit
1559c57a8e
10 changed files with 46 additions and 8 deletions
|
@ -1710,14 +1710,17 @@ gst_element_unlink_pads (GstElement * src, const gchar * srcpadname,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
destpad = gst_element_get_pad (dest, destpadname);
|
destpad = gst_element_get_pad (dest, destpadname);
|
||||||
if (srcpad == NULL) {
|
if (destpad == NULL) {
|
||||||
GST_WARNING_OBJECT (dest, "destination element has no pad \"%s\"",
|
GST_WARNING_OBJECT (dest, "destination element has no pad \"%s\"",
|
||||||
destpadname);
|
destpadname);
|
||||||
|
gst_object_unref (srcpad);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we're satisified they can be unlinked, let's do it */
|
/* we're satisified they can be unlinked, let's do it */
|
||||||
gst_pad_unlink (srcpad, destpad);
|
gst_pad_unlink (srcpad, destpad);
|
||||||
|
gst_object_unref (srcpad);
|
||||||
|
gst_object_unref (destpad);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -208,6 +208,11 @@ GST_START_TEST (test_clipping)
|
||||||
fret = gst_pad_chain (sinkpad, buffer);
|
fret = gst_pad_chain (sinkpad, buffer);
|
||||||
fail_if (fret != GST_FLOW_OK);
|
fail_if (fret != GST_FLOW_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gst_element_set_state (sink, GST_STATE_NULL);
|
||||||
|
gst_element_get_state (sink, NULL, NULL, GST_CLOCK_TIME_NONE);
|
||||||
|
gst_object_unref (sinkpad);
|
||||||
|
gst_object_unref (sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
|
@ -86,6 +86,7 @@ GST_START_TEST (test_sink_completion)
|
||||||
GstState current, pending;
|
GstState current, pending;
|
||||||
|
|
||||||
sink = gst_element_factory_make ("fakesink", "sink");
|
sink = gst_element_factory_make ("fakesink", "sink");
|
||||||
|
g_object_set (G_OBJECT (sink), "sync", TRUE, NULL);
|
||||||
|
|
||||||
ret = gst_element_set_state (sink, GST_STATE_PLAYING);
|
ret = gst_element_set_state (sink, GST_STATE_PLAYING);
|
||||||
fail_unless (ret == GST_STATE_CHANGE_ASYNC, "no async state return");
|
fail_unless (ret == GST_STATE_CHANGE_ASYNC, "no async state return");
|
||||||
|
@ -96,6 +97,7 @@ GST_START_TEST (test_sink_completion)
|
||||||
fail_unless (pending == GST_STATE_PLAYING, "bad pending state");
|
fail_unless (pending == GST_STATE_PLAYING, "bad pending state");
|
||||||
|
|
||||||
src = gst_element_factory_make ("fakesrc", "src");
|
src = gst_element_factory_make ("fakesrc", "src");
|
||||||
|
g_object_set (G_OBJECT (src), "datarate", 200, "sizetype", 2, NULL);
|
||||||
gst_element_link (src, sink);
|
gst_element_link (src, sink);
|
||||||
|
|
||||||
ret = gst_element_set_state (src, GST_STATE_PLAYING);
|
ret = gst_element_set_state (src, GST_STATE_PLAYING);
|
||||||
|
@ -200,6 +202,8 @@ GST_START_TEST (test_livesrc_remove)
|
||||||
fail_unless (ret == GST_STATE_CHANGE_ASYNC, "not async");
|
fail_unless (ret == GST_STATE_CHANGE_ASYNC, "not async");
|
||||||
fail_unless (current == GST_STATE_PAUSED, "not paused");
|
fail_unless (current == GST_STATE_PAUSED, "not paused");
|
||||||
fail_unless (pending == GST_STATE_PAUSED, "not paused");
|
fail_unless (pending == GST_STATE_PAUSED, "not paused");
|
||||||
|
|
||||||
|
gst_object_unref (pipeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST
|
GST_END_TEST
|
||||||
|
|
|
@ -54,6 +54,7 @@ GST_START_TEST (test_state_changes)
|
||||||
|
|
||||||
gst_object_unref (GST_OBJECT (element));
|
gst_object_unref (GST_OBJECT (element));
|
||||||
}
|
}
|
||||||
|
gst_plugin_feature_list_free (features);
|
||||||
gst_task_cleanup_all ();
|
gst_task_cleanup_all ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,10 +57,13 @@ GST_START_TEST (test_interface)
|
||||||
gst_bin_add (bin, filesrc);
|
gst_bin_add (bin, filesrc);
|
||||||
|
|
||||||
fail_unless (gst_bin_get_by_interface (bin, GST_TYPE_URI_HANDLER) == filesrc);
|
fail_unless (gst_bin_get_by_interface (bin, GST_TYPE_URI_HANDLER) == filesrc);
|
||||||
|
gst_object_unref (filesrc);
|
||||||
|
|
||||||
it = gst_bin_iterate_all_by_interface (bin, GST_TYPE_URI_HANDLER);
|
it = gst_bin_iterate_all_by_interface (bin, GST_TYPE_URI_HANDLER);
|
||||||
fail_unless (it != NULL);
|
fail_unless (it != NULL);
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
||||||
fail_unless (item == (gpointer) filesrc);
|
fail_unless (item == (gpointer) filesrc);
|
||||||
|
gst_object_unref (GST_OBJECT (item));
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
|
||||||
gst_iterator_free (it);
|
gst_iterator_free (it);
|
||||||
|
|
||||||
|
@ -68,11 +71,11 @@ GST_START_TEST (test_interface)
|
||||||
gst_element_factory_make ("identity", NULL),
|
gst_element_factory_make ("identity", NULL),
|
||||||
gst_element_factory_make ("identity", NULL),
|
gst_element_factory_make ("identity", NULL),
|
||||||
gst_element_factory_make ("identity", NULL), NULL);
|
gst_element_factory_make ("identity", NULL), NULL);
|
||||||
fail_unless (gst_bin_get_by_interface (bin, GST_TYPE_URI_HANDLER) == filesrc);
|
|
||||||
it = gst_bin_iterate_all_by_interface (bin, GST_TYPE_URI_HANDLER);
|
it = gst_bin_iterate_all_by_interface (bin, GST_TYPE_URI_HANDLER);
|
||||||
fail_unless (it != NULL);
|
fail_unless (it != NULL);
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
||||||
fail_unless (item == (gpointer) filesrc);
|
fail_unless (item == (gpointer) filesrc);
|
||||||
|
gst_object_unref (GST_OBJECT (item));
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
|
||||||
gst_iterator_free (it);
|
gst_iterator_free (it);
|
||||||
|
|
||||||
|
@ -83,10 +86,10 @@ GST_START_TEST (test_interface)
|
||||||
gst_element_factory_make ("identity", NULL),
|
gst_element_factory_make ("identity", NULL),
|
||||||
gst_element_factory_make ("identity", NULL),
|
gst_element_factory_make ("identity", NULL),
|
||||||
GST_ELEMENT (bin2), gst_element_factory_make ("identity", NULL), NULL);
|
GST_ELEMENT (bin2), gst_element_factory_make ("identity", NULL), NULL);
|
||||||
fail_unless (gst_bin_get_by_interface (bin, GST_TYPE_URI_HANDLER) == filesrc);
|
|
||||||
it = gst_bin_iterate_all_by_interface (bin, GST_TYPE_URI_HANDLER);
|
it = gst_bin_iterate_all_by_interface (bin, GST_TYPE_URI_HANDLER);
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
||||||
fail_unless (item == (gpointer) filesrc);
|
fail_unless (item == (gpointer) filesrc);
|
||||||
|
gst_object_unref (GST_OBJECT (item));
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
|
||||||
gst_iterator_free (it);
|
gst_iterator_free (it);
|
||||||
|
|
||||||
|
@ -94,8 +97,11 @@ GST_START_TEST (test_interface)
|
||||||
gst_bin_add (bin2, gst_element_factory_make ("filesrc", NULL));
|
gst_bin_add (bin2, gst_element_factory_make ("filesrc", NULL));
|
||||||
it = gst_bin_iterate_all_by_interface (bin, GST_TYPE_URI_HANDLER);
|
it = gst_bin_iterate_all_by_interface (bin, GST_TYPE_URI_HANDLER);
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
||||||
|
gst_object_unref (GST_OBJECT (item));
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
||||||
|
gst_object_unref (GST_OBJECT (item));
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_OK);
|
||||||
|
gst_object_unref (GST_OBJECT (item));
|
||||||
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
|
fail_unless (gst_iterator_next (it, &item) == GST_ITERATOR_DONE);
|
||||||
gst_iterator_free (it);
|
gst_iterator_free (it);
|
||||||
|
|
||||||
|
|
|
@ -43,8 +43,8 @@ GST_START_TEST (test_from_string)
|
||||||
|
|
||||||
fail_unless (gst_caps_is_equal (caps, caps2));
|
fail_unless (gst_caps_is_equal (caps, caps2));
|
||||||
|
|
||||||
g_free (caps);
|
gst_caps_unref (caps);
|
||||||
g_free (caps2);
|
gst_caps_unref (caps2);
|
||||||
g_free (to_str);
|
g_free (to_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,9 +61,13 @@ GST_START_TEST (test_buffer)
|
||||||
"buffer", GST_TYPE_BUFFER, buffer, NULL);
|
"buffer", GST_TYPE_BUFFER, buffer, NULL);
|
||||||
|
|
||||||
GST_DEBUG ("caps: %" GST_PTR_FORMAT, c1);
|
GST_DEBUG ("caps: %" GST_PTR_FORMAT, c1);
|
||||||
|
|
||||||
gst_buffer_set_caps (buffer, c1); /* gives away our c1 ref */
|
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
|
|
||||||
|
buffer = gst_buffer_new_and_alloc (1000);
|
||||||
|
gst_buffer_set_caps (buffer, c1); /* doesn't give away our c1 ref */
|
||||||
|
|
||||||
|
gst_caps_unref (c1);
|
||||||
|
gst_buffer_unref (buffer); /* Should now drop both references */
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
@ -115,7 +119,7 @@ GST_END_TEST;
|
||||||
|
|
||||||
GST_START_TEST (test_static_caps)
|
GST_START_TEST (test_static_caps)
|
||||||
{
|
{
|
||||||
GstStaticCaps scaps = GST_STATIC_CAPS ("audio/x-raw-int,rate=44100");
|
static GstStaticCaps scaps = GST_STATIC_CAPS ("audio/x-raw-int,rate=44100");
|
||||||
GstCaps *caps1;
|
GstCaps *caps1;
|
||||||
GstCaps *caps2;
|
GstCaps *caps2;
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ GST_START_TEST (test_add_remove_pad)
|
||||||
|
|
||||||
/* clean up our own reference */
|
/* clean up our own reference */
|
||||||
gst_object_unref (p);
|
gst_object_unref (p);
|
||||||
|
gst_object_unref (e);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
@ -127,11 +128,17 @@ GST_START_TEST (test_link)
|
||||||
gst_element_set_state (sink, GST_STATE_NULL);
|
gst_element_set_state (sink, GST_STATE_NULL);
|
||||||
gst_element_set_state (src, GST_STATE_NULL);
|
gst_element_set_state (src, GST_STATE_NULL);
|
||||||
|
|
||||||
|
gst_element_get_state (sink, NULL, NULL, GST_CLOCK_TIME_NONE);
|
||||||
|
g_usleep (G_USEC_PER_SEC / 2);
|
||||||
|
|
||||||
ASSERT_OBJECT_REFCOUNT (sink, "sink", 1);
|
ASSERT_OBJECT_REFCOUNT (sink, "sink", 1);
|
||||||
ASSERT_OBJECT_REFCOUNT (src, "src", 1);
|
ASSERT_OBJECT_REFCOUNT (src, "src", 1);
|
||||||
gst_element_unlink_pads (src, "src", sink, "sink");
|
gst_element_unlink_pads (src, "src", sink, "sink");
|
||||||
ASSERT_OBJECT_REFCOUNT (sink, "sink", 1);
|
ASSERT_OBJECT_REFCOUNT (sink, "sink", 1);
|
||||||
ASSERT_OBJECT_REFCOUNT (src, "src", 1);
|
ASSERT_OBJECT_REFCOUNT (src, "src", 1);
|
||||||
|
|
||||||
|
gst_object_unref (src);
|
||||||
|
gst_object_unref (sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
|
@ -58,6 +58,8 @@ GST_START_TEST (test_remove1)
|
||||||
srcpad = gst_element_get_pad (src, "src");
|
srcpad = gst_element_get_pad (src, "src");
|
||||||
/* pad cannot be linked now */
|
/* pad cannot be linked now */
|
||||||
fail_if (gst_pad_is_linked (srcpad));
|
fail_if (gst_pad_is_linked (srcpad));
|
||||||
|
|
||||||
|
gst_object_unref (b1);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
|
@ -70,6 +70,7 @@ GST_START_TEST (test_manual_iteration)
|
||||||
/* clean up */
|
/* clean up */
|
||||||
gst_iterator_free (iter);
|
gst_iterator_free (iter);
|
||||||
g_mutex_free (m);
|
g_mutex_free (m);
|
||||||
|
g_list_free (l);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
@ -119,6 +120,7 @@ GST_START_TEST (test_resync)
|
||||||
/* clean up */
|
/* clean up */
|
||||||
gst_iterator_free (iter);
|
gst_iterator_free (iter);
|
||||||
g_mutex_free (m);
|
g_mutex_free (m);
|
||||||
|
g_list_free (l);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
@ -160,6 +162,7 @@ GST_START_TEST (test_fold)
|
||||||
/* clean up */
|
/* clean up */
|
||||||
gst_iterator_free (iter);
|
gst_iterator_free (iter);
|
||||||
g_mutex_free (m);
|
g_mutex_free (m);
|
||||||
|
g_list_free (l);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
|
@ -472,6 +472,9 @@ GST_START_TEST (test_value_intersect)
|
||||||
fail_unless (GST_VALUE_HOLDS_FOURCC (&dest));
|
fail_unless (GST_VALUE_HOLDS_FOURCC (&dest));
|
||||||
fail_unless (gst_value_get_fourcc (&dest) ==
|
fail_unless (gst_value_get_fourcc (&dest) ==
|
||||||
GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'));
|
GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'));
|
||||||
|
|
||||||
|
g_value_unset (&src1);
|
||||||
|
g_value_unset (&src2);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
Loading…
Reference in a new issue