webrtc_stats: Fix to get valid user data in __webrtcbin_stats_cb() 65/271665/1
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 24 Feb 2022 07:30:50 +0000 (16:30 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 24 Feb 2022 07:30:50 +0000 (16:30 +0900)
[Version] 0.3.61
[Issue Type] Bug fix

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

index bac73b16780f41f19540b2fc54bb2aacbe2d7d98..210c89bf3ae6de15d2a1c3178f93c814de8e4b32 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.60
+Version:    0.3.61
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index c25052858a2eb0c73983fa27016e8b05f1173d33..c189561cd6a9dff4494b846cee70bc6b6a716993 100644 (file)
@@ -571,8 +571,10 @@ static gboolean __webrtcbin_stats_cb(GQuark field_id, const GValue *value, gpoin
                RET_VAL_IF((type < GST_WEBRTC_STATS_CODEC || type > GST_WEBRTC_STATS_CERTIFICATE),
                        TRUE, "invalid type(%u)", type);
 
-               if (!(stats_userdata->type_mask & parse_stats[type].type_mask))
+               if (!(stats_userdata->type_mask & parse_stats[type].type_mask)) {
+                       LOG_DEBUG("skip this type[%u], type_mask[0x%x]", type, stats_userdata->type_mask);
                        return TRUE;
+               }
 
                parse_stats[type].func(s, &stats_userdata->webrtc->stats_cb);
 
@@ -589,22 +591,29 @@ static void __webrtcbin_get_stats_cb(GstPromise *promise, gpointer user_data)
        const GstStructure *stats;
 
        RET_IF(gst_promise_wait(promise) != GST_PROMISE_RESULT_REPLIED, "failed to gst_promise_wait()");
+       RET_IF(user_data == NULL, "user_data is NULL");
 
        stats = gst_promise_get_reply(promise);
        RET_IF(stats == NULL, "failed to gst_promise_get_reply()");
 
        gst_structure_foreach(stats, __webrtcbin_stats_cb, user_data);
+
+       g_free(user_data);
 }
 
 void _webrtcbin_get_stats(webrtc_s *webrtc, int type_mask)
 {
        GstPromise *promise;
-       stats_userdata_s stats_userdata = { webrtc, type_mask };
+       stats_userdata_s *stats_userdata;
 
        RET_IF(webrtc == NULL, "webrtc is NULL");
        RET_IF(webrtc->gst.webrtcbin == NULL, "webrtcbin is NULL");
 
-       promise = gst_promise_new_with_change_func((GstPromiseChangeFunc)__webrtcbin_get_stats_cb, &stats_userdata, NULL);
+       stats_userdata = g_new0(stats_userdata_s, 1);
+       stats_userdata->webrtc = webrtc;
+       stats_userdata->type_mask = type_mask;
+
+       promise = gst_promise_new_with_change_func((GstPromiseChangeFunc)__webrtcbin_get_stats_cb, stats_userdata, NULL);
 
        g_signal_emit_by_name(webrtc->gst.webrtcbin, "get-stats", NULL, promise);
        LOG_DEBUG("emitting 'get-stats' on %p", webrtc->gst.webrtcbin);