From: Sangchul Lee Date: Tue, 26 Jul 2022 02:16:58 +0000 (+0900) Subject: webrtc_sink/source: Unref object obtained by gst_element_get_parent() X-Git-Tag: submit/tizen/20220726.122258~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=888a784587bc041eaa38742a7de96fcebe8bd2fa;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_sink/source: Unref object obtained by gst_element_get_parent() [Version] 0.3.173 [Issue Type] Resource leak Change-Id: I5f4589c1c9d7daa29f493250294016d2ffecba51 Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 427e127b..16ababe3 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -1,6 +1,6 @@ Name: capi-media-webrtc Summary: A WebRTC library in Tizen Native API -Version: 0.3.172 +Version: 0.3.173 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_sink.c b/src/webrtc_sink.c index 9011143b..edbffddb 100644 --- a/src/webrtc_sink.c +++ b/src/webrtc_sink.c @@ -506,6 +506,7 @@ void _track_build_context_destroy_cb(gpointer data) void _sink_slot_destroy_cb(gpointer data) { + GstElement *parent; webrtc_gst_slot_s *sink = (webrtc_gst_slot_s *)data; RET_IF(sink == NULL, "sink is NULL"); @@ -518,7 +519,10 @@ void _sink_slot_destroy_cb(gpointer data) sink->signals = NULL; } - gst_bin_remove(GST_BIN(gst_element_get_parent(sink->bin)), GST_ELEMENT(sink->bin)); + if ((parent = GST_ELEMENT(gst_element_get_parent(sink->bin)))) { + gst_bin_remove(GST_BIN(parent), GST_ELEMENT(sink->bin)); + gst_object_unref(parent); + } if (sink->media_format) media_format_unref(sink->media_format); diff --git a/src/webrtc_source.c b/src/webrtc_source.c index cafb17f9..a7671be9 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -1150,8 +1150,13 @@ void _source_slot_destroy_cb(gpointer data) g_free(source->av[i].raw_format); } - if (source->bin) - gst_bin_remove(GST_BIN(gst_element_get_parent(source->bin)), GST_ELEMENT(source->bin)); + if (source->bin) { + GstElement *parent = GST_ELEMENT(gst_element_get_parent(source->bin)); + if (parent) { + gst_bin_remove(GST_BIN(parent), GST_ELEMENT(source->bin)); + gst_object_unref(parent); + } + } if (source->media_format) media_format_unref(source->media_format);