From: Eunhae Choi Date: Fri, 10 Mar 2017 08:42:04 +0000 (+0900) Subject: [0.3.52] apply new muse API for checking invalid socket fd X-Git-Tag: accepted/tizen/common/20170404.142301~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F12%2F121812%2F1;p=platform%2Fcore%2Fapi%2Fplayer.git [0.3.52] apply new muse API for checking invalid socket fd Change-Id: I9108041441214c22a13731cb375437143a8e029c (cherry picked from commit f4c2fe941d69b6931f48fa8a281e97827a9afab3) --- diff --git a/packaging/capi-media-player.spec b/packaging/capi-media-player.spec index 3dc118c..623a6fe 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.51 +Version: 0.3.52 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/player.c b/src/player.c index 54a5cc3..201164b 100755 --- a/src/player.c +++ b/src/player.c @@ -106,8 +106,8 @@ typedef struct { typedef struct { intptr_t remote_pkt; gint fd; + gint fd_id; bool use_tsurf_pool; - struct timespec fd_time; } _media_pkt_fin_data; /* @@ -172,22 +172,9 @@ int _player_media_packet_finalize(media_packet_h pkt, int error_code, void *user } if (muse_core_ipc_fd_is_valid(fin_data->fd)) { - struct stat stat_results = {0, }; - char s_path[MAX_S_PATH_LEN] = {0, }; - - snprintf(s_path, MAX_S_PATH_LEN, "/proc/self/fd/%d", fin_data->fd); - - if (lstat(s_path, &stat_results) != 0) { - LOGW("[fd:%d][errno:%d] lstat error", fin_data->fd, errno); - /* do not exit here to avoid mem leak in muse demon */ - } else { - if ((fin_data->fd_time.tv_sec != stat_results.st_mtim.tv_sec) || - (fin_data->fd_time.tv_nsec != stat_results.st_mtim.tv_nsec)) { - LOGE("[fd:%d][%d:%ld][%d:%ld] is invalid", fin_data->fd, - fin_data->fd_time.tv_sec, fin_data->fd_time.tv_nsec, - stat_results.st_mtim.tv_sec, stat_results.st_mtim.tv_nsec); - goto EXIT; - } + if (muse_core_client_check_fd_id_value(fin_data->fd, fin_data->fd_id) == FALSE) { + LOGE("[fd:%d,id:%d] is invalid.", fin_data->fd, fin_data->fd_id); + goto EXIT; } packet = fin_data->remote_pkt; @@ -797,8 +784,6 @@ static void __media_packet_video_frame_cb_handler(callback_cb_info_s * cb_info, uint64_t pts = 0; int i = 0; muse_core_msg_parse_err_e err = MUSE_MSG_PARSE_ERROR_NONE; - struct stat stat_results = {0, }; - char s_path[MAX_S_PATH_LEN] = {0, }; void *jobj = muse_core_msg_json_object_new(recv_data->buffer, NULL, &err); if (!jobj || @@ -917,11 +902,8 @@ static void __media_packet_video_frame_cb_handler(callback_cb_info_s * cb_info, fin_data->fd = cb_info->fd; fin_data->use_tsurf_pool = cb_info->use_tsurf_pool; - snprintf(s_path, MAX_S_PATH_LEN, "/proc/self/fd/%d", fin_data->fd); - if (lstat(s_path, &stat_results) != 0) - LOGW("[fd:%d][errno:%d] lstat error", fin_data->fd, errno); - else /* Keep the Time of last modified of socket */ - fin_data->fd_time = stat_results.st_mtim; + /* Keep the fd id to check validation when the pkt is destroyed. */ + fin_data->fd_id = muse_core_client_get_fd_id_value(fin_data->fd); ret = media_packet_create_from_tbm_surface(cb_info->pkt_fmt, tsurf, (media_packet_finalize_cb) _player_media_packet_finalize, (void *)fin_data, &pkt); if (ret != MEDIA_PACKET_ERROR_NONE || !pkt) { @@ -1706,6 +1688,7 @@ static void callback_destroy(callback_cb_info_s * cb_info) muse_core_connection_close(cb_info->fd); /* fd close and unlink symbolic path */ if (cb_info->data_fd > INVALID_DEFAULT_VALUE) muse_core_connection_close(cb_info->data_fd); + cb_info->fd = cb_info->data_fd = INVALID_DEFAULT_VALUE; g_thread_join(cb_info->thread);