[0.3.156] resolve evas resource leak 18/321718/1 accepted/tizen_7.0_unified tizen_7.0 accepted/tizen/7.0/unified/20250402.054459
authorEunhye Choi <eunhae1.choi@samsung.com>
Tue, 25 Mar 2025 10:34:14 +0000 (19:34 +0900)
committerEunhye Choi <eunhae1.choi@samsung.com>
Thu, 27 Mar 2025 05:28:28 +0000 (14:28 +0900)
- evas resource can not be released
  while the mainloop is occupied by player api
  which is waiting muse return
- after getting return of unprepare operation, release evas resource

Change-Id: I9add3b401351bdc412513c1ee14ac6dcfd338f07

packaging/capi-media-player.spec
src/player.c

index d3b0a1ed0397e6f057d5fe7c5fa90984028fd76c..eb14a62858fe2c945fcc3a5be37a38bb93ff1c5c 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-player
 Summary:    A Media Player API
-Version:    0.3.155
+Version:    0.3.156
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index ba90f961ab84003321c33c84bbff28140aac9988..3a3bd1dd3bd92807233d272b4a0956abcd55d2ad 100644 (file)
@@ -1612,7 +1612,7 @@ static void _player_internal_buffer_release(player_cli_s *pc)
 
        if (!DP_INTERFACE(pc)) {
                LOGW("display port interface is NULL");
-               goto RELEASE_INTERNAL_MOMORY;
+               goto RELEASE_INTERNAL_MEMORY;
        }
 
        if (mm_display_interface_get_type(DP_INTERFACE(pc), &display_type) != MM_ERROR_NONE) {
@@ -1621,7 +1621,7 @@ static void _player_internal_buffer_release(player_cli_s *pc)
        }
 
        if (display_type != MM_DISPLAY_TYPE_EVAS)
-               goto RELEASE_INTERNAL_MOMORY;
+               goto RELEASE_INTERNAL_MEMORY;
 
        if (CALLBACK_INFO(pc)->dp_info.visible != PLAYER_VISIBLE_INFO_FALSE) {
                if (mm_display_interface_evas_set_visible(DP_INTERFACE(pc), false) != MM_ERROR_NONE) {
@@ -1630,12 +1630,13 @@ static void _player_internal_buffer_release(player_cli_s *pc)
                }
        }
 
+       /* this function waits to excute on the main thread (timeout 1 sec) */
        if (mm_display_interface_evas_flush(DP_INTERFACE(pc), false) != MM_ERROR_NONE) {
                LOGE("mm_display_interface_evas_flush failed");
                return;
        }
 
-RELEASE_INTERNAL_MOMORY:
+RELEASE_INTERNAL_MEMORY:
        _player_release_internal_memory(pc, false);
        pc->cb_info->video_frame_pool_size = 0;
        __player_remove_tsurf_list(pc);
@@ -1669,15 +1670,8 @@ static bool _event_callback_handler(callback_cb_info_s *cb_info, muse_player_eve
                return false;
        }
 
-       if (event == MUSE_PLAYER_EVENT_TYPE_STATE_CHANGED ||
-               event == MUSE_PLAYER_EVENT_TYPE_INTERRUPT) {
+       if (event == MUSE_PLAYER_EVENT_TYPE_INTERRUPT)
                _player_internal_buffer_release((player_cli_s *)cb_info->pc);
-               if (event == MUSE_PLAYER_EVENT_TYPE_STATE_CHANGED) {
-                       g_free(recv_data->buffer);
-                       g_free(recv_data);
-                       return true;
-               }
-       }
 
        return _user_callback_handler(cb_info, event, recv_data);
 }
@@ -2308,6 +2302,8 @@ int player_unprepare(player_h player)
        g_free(ret_buf);
 
 EXIT:
+       _player_internal_buffer_release(pc);
+
        LOGD("LEAVE 0x%X", ret);
        return ret;
 }