webrtc_sink/source: Unref object obtained by gst_element_get_parent() 63/278763/2
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 26 Jul 2022 02:16:58 +0000 (11:16 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 26 Jul 2022 05:40:29 +0000 (14:40 +0900)
[Version] 0.3.173
[Issue Type] Resource leak

Change-Id: I5f4589c1c9d7daa29f493250294016d2ffecba51
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-webrtc.spec
src/webrtc_sink.c
src/webrtc_source.c

index 427e127ba40755d30a6eb9c0af44b6ea552709e8..16ababe30d13ab2786346b29a5a1deffdb9e2fed 100644 (file)
@@ -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
index 9011143bb18bc2daeab81d1cd6d980fe7dfb1261..edbffddbb1ef1211c46057d5d97ce0a9d28e649a 100644 (file)
@@ -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);
index cafb17f94eda0429552b4e6f0bdf9ea9eab32ccb..a7671be9efeb8bc33919448618b2f760f610c1c9 100644 (file)
@@ -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);