[0.2.221] Fix crash when the player has next_uri 54/230754/2 accepted/tizen/unified/20200415.121431 submit/tizen/20200413.123659
authorGilbok Lee <gilbok.lee@samsung.com>
Tue, 14 Apr 2020 04:41:56 +0000 (13:41 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Tue, 14 Apr 2020 06:30:30 +0000 (15:30 +0900)
- using g_list_free_full

Change-Id: I232bc62548524576517a97659f90cc322cf1f5d8

packaging/libmm-player.spec
src/mm_player_priv.c

index 2247e9e..b6d3633 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.6.220
+Version:    0.6.221
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index c9ce7a9..78ae23a 100644 (file)
@@ -669,12 +669,7 @@ __mmplayer_initialize_gapless_play(mmplayer_t *player)
 
        /* clean found audio decoders */
        if (player->audio_decoders) {
-               GList *a_dec = player->audio_decoders;
-               for (; a_dec; a_dec = g_list_next(a_dec)) {
-                       gchar *name = a_dec->data;
-                       MMPLAYER_FREEIF(name);
-               }
-               g_list_free(player->audio_decoders);
+               g_list_free_full(player->audio_decoders, (GDestroyNotify)g_free);
                player->audio_decoders = NULL;
        }
 
@@ -3142,27 +3137,27 @@ _mmplayer_video_stream_release_bo(mmplayer_t *player, void *bo)
        LOGW("failed to find bo %p", bo);
        return ret;
 }
+static void
+__mmplayer_video_stream_bo_list_free(mmplayer_video_bo_info_t *tmp)
+{
+       if (!tmp)
+               return;
+
+       if (tmp->bo)
+               tbm_bo_unref(tmp->bo);
+       g_free(tmp);
+}
 
 static void
 __mmplayer_video_stream_destroy_bo_list(mmplayer_t *player)
 {
-       GList *l = NULL;
-
        MMPLAYER_FENTER();
        MMPLAYER_RETURN_IF_FAIL(player);
 
        MMPLAYER_VIDEO_BO_LOCK(player);
        if (player->video_bo_list) {
                LOGD("destroy video_bo_list : %d", g_list_length(player->video_bo_list));
-               for (l = g_list_first(player->video_bo_list); l; l = g_list_next(l)) {
-                       mmplayer_video_bo_info_t *tmp = (mmplayer_video_bo_info_t *)l->data;
-                       if (tmp) {
-                               if (tmp->bo)
-                                       tbm_bo_unref(tmp->bo);
-                               g_free(tmp);
-                       }
-               }
-               g_list_free(player->video_bo_list);
+               g_list_free_full(player->video_bo_list, (GDestroyNotify)__mmplayer_video_stream_bo_list_free);
                player->video_bo_list = NULL;
        }
        player->video_bo_size = 0;
@@ -4975,12 +4970,7 @@ _mmplayer_destroy(MMHandleType handle)
        _mmplayer_deconstruct_attribute(handle);
 
        if (player->uri_info.uri_list) {
-               GList *uri_list = player->uri_info.uri_list;
-               for (; uri_list; uri_list = g_list_next(uri_list)) {
-                       gchar *uri = uri_list->data;
-                       MMPLAYER_FREEIF(uri);
-               }
-               g_list_free(player->uri_info.uri_list);
+               g_list_free_full(player->uri_info.uri_list, (GDestroyNotify)g_free);
                player->uri_info.uri_list = NULL;
        }
 
@@ -7633,30 +7623,23 @@ __mmplayer_release_misc_post(mmplayer_t *player)
 
        /* clean found audio decoders */
        if (player->audio_decoders) {
-               GList *a_dec = player->audio_decoders;
-               for (; a_dec; a_dec = g_list_next(a_dec)) {
-                       gchar *name = a_dec->data;
-                       MMPLAYER_FREEIF(name);
-               }
-               g_list_free(player->audio_decoders);
+               g_list_free_full(player->audio_decoders, (GDestroyNotify)g_free);
                player->audio_decoders = NULL;
        }
 
        /* clean the uri list except original uri */
        if (player->uri_info.uri_list && g_list_length(player->uri_info.uri_list) > 1) {
+               GList *tmp = NULL;
                original_uri = g_list_nth_data(player->uri_info.uri_list, 0);
+               tmp = g_list_remove_link(player->uri_info.uri_list, player->uri_info.uri_list);
+               g_list_free_full(tmp, (GDestroyNotify)g_free);
+
                if (!original_uri)
                        LOGW("failed to get original uri info");
 
                mm_player_set_attribute((MMHandleType)player, NULL, "profile_uri",
                                original_uri, (original_uri) ? strlen(original_uri) : (0), NULL);
 
-               GList *uri_list = player->uri_info.uri_list;
-               for (; uri_list; uri_list = g_list_next(uri_list)) {
-                       gchar *uri = uri_list->data;
-                       if (original_uri != uri)
-                               MMPLAYER_FREEIF(uri);
-               }
        }
 
        /* clear the audio stream buffer list */