webrtc_source: Improve list handling in __complete_mediapacketsrc_from_raw_format() 35/265935/1
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 2 Nov 2021 04:12:29 +0000 (13:12 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 2 Nov 2021 04:23:02 +0000 (13:23 +0900)
When an error occurs, a node memory of list for appsrc is not freed.
It is now fixed.

[Version] 0.2.145
[Issue Type] Bug fix

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

index 4e528b6caf72525423a06c334dbf93ba71e5f3d4..5fb89c2ab88fbad88c9b114527d87ccf571b2661 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.2.144
+Version:    0.2.145
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 9932ab993821d2decf97e9bf97c0d6cc591a49dc..7d8b95a4d107bddfd3ec632b3feb4f9ac104fa51 100644 (file)
@@ -2281,6 +2281,7 @@ static int __complete_mediapacketsrc_from_raw_format(webrtc_s *webrtc, webrtc_gs
        GstElement *appsrc;
        GstElement *capsfilter;
        GList *element_list = NULL;
+       GList *element_list2 = NULL;
        GstCaps *sink_caps;
 
        RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
@@ -2314,25 +2315,27 @@ static int __complete_mediapacketsrc_from_raw_format(webrtc_s *webrtc, webrtc_gs
                return WEBRTC_ERROR_INVALID_OPERATION;
        }
 
-       PREPEND_ELEMENT(element_list, appsrc);
-       if (!__link_elements(element_list)) {
+       element_list2 = g_list_copy(element_list);
+       PREPEND_ELEMENT(element_list2, appsrc); /* element_list2 has appsrc */
+       if (!__link_elements(element_list2)) {
                ret = WEBRTC_ERROR_INVALID_OPERATION;
                goto exit_with_remove_from_bin;
        }
 
        if (!(capsfilter = gst_bin_get_by_name(source->bin, ELEMENT_NAME_RTP_CAPSFILTER))) {
-               element_list = g_list_nth(element_list, 1); /* skip removing appsrc from bin */
                ret = WEBRTC_ERROR_INVALID_OPERATION;
                goto exit_with_remove_from_bin;
        }
 
        SAFE_G_LIST_FREE(element_list);
+       SAFE_G_LIST_FREE(element_list2);
 
        return _set_ghost_pad_target(*src_pad, capsfilter, true);
 
 exit_with_remove_from_bin:
        __remove_elements_from_bin(source->bin, element_list);
        SAFE_G_LIST_FREE(element_list);
+       SAFE_G_LIST_FREE(element_list2);
        return ret;
 exit:
        SAFE_G_LIST_FREE_FULL(element_list, gst_object_unref);