From: Eunhye Choi Date: Tue, 25 Mar 2025 10:34:14 +0000 (+0900) Subject: [0.3.156] resolve evas resource leak X-Git-Tag: accepted/tizen/7.0/unified/20250402.054459^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Ftizen_7.0;p=platform%2Fcore%2Fapi%2Fplayer.git [0.3.156] resolve evas resource leak - 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 --- diff --git a/packaging/capi-media-player.spec b/packaging/capi-media-player.spec index d3b0a1e..eb14a62 100644 --- a/packaging/capi-media-player.spec +++ b/packaging/capi-media-player.spec @@ -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 diff --git a/src/player.c b/src/player.c index ba90f96..3a3bd1d 100644 --- a/src/player.c +++ b/src/player.c @@ -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; }