From b8d04c88430fee12676fdb2d849282202eefbaee Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 23 Jan 2007 17:49:29 +0000 Subject: [PATCH] gst/playback/gstdecodebin2.c: Don't leak mutex. Original commit message from CVS: * gst/playback/gstdecodebin2.c: (gst_decode_bin_finalize): Don't leak mutex. * tests/check/elements/playbin.c: (test_sink_usage_video_only_stream), (test_suburi_error_unknowntype), (test_suburi_error_invalidfile), (test_suburi_error_wrongproto), (test_missing_urisource_handler), (test_missing_suburisource_handler), (test_missing_primary_decoder), (playbin_suite): Run all tests once with decodebin and once with decodebin2. One test does not pass yet with decodebin2. --- ChangeLog | 14 ++++++++ gst/playback/gstdecodebin2.c | 5 ++- tests/check/elements/playbin.c | 74 ++++++++++++++++++++++++++++-------------- 3 files changed, 67 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 33db716..b720cd3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2007-01-23 Tim-Philipp Müller + + * gst/playback/gstdecodebin2.c: (gst_decode_bin_finalize): + Don't leak mutex. + + * tests/check/elements/playbin.c: + (test_sink_usage_video_only_stream), + (test_suburi_error_unknowntype), (test_suburi_error_invalidfile), + (test_suburi_error_wrongproto), (test_missing_urisource_handler), + (test_missing_suburisource_handler), + (test_missing_primary_decoder), (playbin_suite): + Run all tests once with decodebin and once with decodebin2. + One test does not pass yet with decodebin2. + 2007-01-23 Edward Hervey * ext/ogg/gstoggmux.c: (all_pads_eos), (gst_ogg_mux_collected): diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index bb04e92..01e94ba 100644 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@ -492,8 +492,11 @@ gst_decode_bin_dispose (GObject * object) static void gst_decode_bin_finalize (GObject * object) { + GstDecodeBin *decode_bin; - /* FILLME */ + decode_bin = GST_DECODE_BIN (object); + + g_mutex_free (decode_bin->lock); G_OBJECT_CLASS (parent_class)->finalize (object); } diff --git a/tests/check/elements/playbin.c b/tests/check/elements/playbin.c index 23d5d8a..1d2f2229 100644 --- a/tests/check/elements/playbin.c +++ b/tests/check/elements/playbin.c @@ -28,8 +28,21 @@ #ifndef GST_DISABLE_LOADSAVE_REGISTRY +#define DEFINE_TEST(func) \ + static void func (void); \ + \ + GST_START_TEST(func ## _decodebin1) \ + { g_unsetenv("USE_DECODEBIN2"); func(); } \ + GST_END_TEST; \ + \ + GST_START_TEST(func ## _decodebin2) \ + { g_setenv("USE_DECODEBIN2", "1", TRUE); func(); } \ + GST_END_TEST; + +DEFINE_TEST (test_sink_usage_video_only_stream) + /* make sure the audio sink is not touched for video-only streams */ -GST_START_TEST (test_sink_usage_video_only_stream) + static void test_sink_usage_video_only_stream (void) { GstElement *playbin, *fakevideosink, *fakeaudiosink; GstState cur_state, pending_state; @@ -67,10 +80,10 @@ GST_START_TEST (test_sink_usage_video_only_stream) gst_object_unref (playbin); } -GST_END_TEST; - /* this tests async error handling when setting up the subbin */ -GST_START_TEST (test_suburi_error_unknowntype) +DEFINE_TEST (test_suburi_error_unknowntype) + + static void test_suburi_error_unknowntype (void) { GstElement *playbin, *fakesink; @@ -99,9 +112,9 @@ GST_START_TEST (test_suburi_error_unknowntype) gst_object_unref (playbin); } -GST_END_TEST; +DEFINE_TEST (test_suburi_error_invalidfile) -GST_START_TEST (test_suburi_error_invalidfile) + static void test_suburi_error_invalidfile (void) { GstElement *playbin, *fakesink; @@ -129,9 +142,9 @@ GST_START_TEST (test_suburi_error_invalidfile) gst_object_unref (playbin); } -GST_END_TEST; +DEFINE_TEST (test_suburi_error_wrongproto) -GST_START_TEST (test_suburi_error_wrongproto) + static void test_suburi_error_wrongproto (void) { GstElement *playbin, *fakesink; @@ -159,8 +172,6 @@ GST_START_TEST (test_suburi_error_wrongproto) gst_object_unref (playbin); } -GST_END_TEST; - static GstElement * create_playbin (const gchar * uri) { @@ -187,7 +198,9 @@ create_playbin (const gchar * uri) return playbin; } -GST_START_TEST (test_missing_urisource_handler) +DEFINE_TEST (test_missing_urisource_handler) + + static void test_missing_urisource_handler (void) { GstStructure *s; GstMessage *msg; @@ -236,9 +249,9 @@ GST_START_TEST (test_missing_urisource_handler) gst_object_unref (playbin); } -GST_END_TEST; +DEFINE_TEST (test_missing_suburisource_handler) -GST_START_TEST (test_missing_suburisource_handler) + static void test_missing_suburisource_handler (void) { GstStructure *s; GstMessage *msg; @@ -288,9 +301,8 @@ GST_START_TEST (test_missing_suburisource_handler) gst_object_unref (playbin); } -GST_END_TEST; - -GST_START_TEST (test_missing_primary_decoder) +DEFINE_TEST (test_missing_primary_decoder) + static void test_missing_primary_decoder (void) { GstStructure *s; GstMessage *msg; @@ -337,8 +349,6 @@ GST_START_TEST (test_missing_primary_decoder) gst_object_unref (playbin); } -GST_END_TEST; - /*** redvideo:// source ***/ static guint @@ -574,6 +584,7 @@ GST_PLUGIN_DEFINE_STATIC #endif /* GST_DISABLE_LOADSAVE_REGISTRY */ + static Suite * playbin_suite (void) { @@ -583,13 +594,26 @@ playbin_suite (void) suite_add_tcase (s, tc_chain); #ifndef GST_DISABLE_LOADSAVE_REGISTRY - tcase_add_test (tc_chain, test_sink_usage_video_only_stream); - tcase_add_test (tc_chain, test_suburi_error_wrongproto); - tcase_add_test (tc_chain, test_suburi_error_invalidfile); - tcase_add_test (tc_chain, test_suburi_error_unknowntype); - tcase_add_test (tc_chain, test_missing_urisource_handler); - tcase_add_test (tc_chain, test_missing_suburisource_handler); - tcase_add_test (tc_chain, test_missing_primary_decoder); + /* with the old decodebin */ + tcase_add_test (tc_chain, test_sink_usage_video_only_stream_decodebin1); + tcase_add_test (tc_chain, test_suburi_error_wrongproto_decodebin1); + tcase_add_test (tc_chain, test_suburi_error_invalidfile_decodebin1); + tcase_add_test (tc_chain, test_suburi_error_unknowntype_decodebin1); + tcase_add_test (tc_chain, test_missing_urisource_handler_decodebin1); + tcase_add_test (tc_chain, test_missing_suburisource_handler_decodebin1); + tcase_add_test (tc_chain, test_missing_primary_decoder_decodebin1); + + /* and again with decodebin2 */ + if (0) { + /* THIS TEST DOES NOT PASS WITH DECODEBIN2 */ + tcase_add_test (tc_chain, test_missing_primary_decoder_decodebin2); + } + tcase_add_test (tc_chain, test_sink_usage_video_only_stream_decodebin2); + tcase_add_test (tc_chain, test_suburi_error_wrongproto_decodebin2); + tcase_add_test (tc_chain, test_suburi_error_invalidfile_decodebin2); + tcase_add_test (tc_chain, test_suburi_error_unknowntype_decodebin2); + tcase_add_test (tc_chain, test_missing_urisource_handler_decodebin2); + tcase_add_test (tc_chain, test_missing_suburisource_handler_decodebin2); /* one day we might also want to have the following checks: * tcase_add_test (tc_chain, test_missing_secondary_decoder_one_fatal); -- 2.7.4