[0.3.52] apply new muse API for checking invalid socket fd 12/121812/1
authorEunhae Choi <eunhae1.choi@samsung.com>
Fri, 10 Mar 2017 08:42:04 +0000 (17:42 +0900)
committereunhae choi <eunhae1.choi@samsung.com>
Wed, 29 Mar 2017 05:55:37 +0000 (22:55 -0700)
Change-Id: I9108041441214c22a13731cb375437143a8e029c
(cherry picked from commit f4c2fe941d69b6931f48fa8a281e97827a9afab3)

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

index 3dc118c..623a6fe 100644 (file)
@@ -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
index 54a5cc3..201164b 100755 (executable)
@@ -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);