[0.3.56] do not add ev if there is no registered cb 46/125346/1 accepted/tizen/unified/20170420.154838 submit/tizen/20170420.053325
authorEunhae Choi <eunhae1.choi@samsung.com>
Mon, 10 Apr 2017 12:01:53 +0000 (21:01 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Mon, 17 Apr 2017 05:23:36 +0000 (14:23 +0900)
Change-Id: I4e8b7bfc0e6e13a39d8a5d1b8b69623d7506ef72

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

index 07d73c3..0998d9f 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-player
 Summary:    A Media Player API
-Version:    0.3.55
+Version:    0.3.56
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 6051b6b..4be7e6d 100644 (file)
@@ -1188,7 +1188,7 @@ gboolean _player_event_job_function(void *user_data)
                return FALSE;
        }
 
-       /* LOGD("enter ev:%d", data->int_data); */
+       LOGD("enter ev:%d", data->int_data);
 
        g_mutex_lock(&data->event_mutex);
        ev = data->int_data;
@@ -1282,6 +1282,8 @@ static void *_player_event_queue_loop(void *param)
                                }
 
                                if (_player_need_sync_context(event_data->int_data)) {
+                                       if (cb_info->user_cb[event_data->int_data] &&
+                                               _user_callbacks[event_data->int_data]) {
                                                g_mutex_lock(&ev->idle_ev_mutex);
                                                ev->idle_ev_list = g_list_append(ev->idle_ev_list, (gpointer)event_data);
                                                g_mutex_unlock(&ev->idle_ev_mutex);
@@ -1292,6 +1294,14 @@ static void *_player_event_queue_loop(void *param)
                                                                                (GSourceFunc)_player_event_job_function,
                                                                                (gpointer)event_data,
                                                                                NULL);
+                                       } else {
+                                               LOGW("there is no registered cb for ev:%d", event_data->int_data);
+                                               if (event_data->recv_data) {
+                                                       g_free(event_data->recv_data->buffer);
+                                                       g_free(event_data->recv_data);
+                                               }
+                                               g_free(event_data);
+                                       }
                                } else {
                                        _player_event_job_function(event_data);
                                }
@@ -1345,8 +1355,10 @@ static void _player_remove_idle_event(callback_cb_info_s *cb_info, muse_player_e
 
        LOGD("remove idle event[%d] or all[%d]", event_type, remove_all);
 
-       for (list = ev->idle_ev_list; list; list = g_list_next(list)) {
+       list = ev->idle_ev_list;
+       while (list) {
                event_data = list->data;
+               list = g_list_next(list);
 
                if (!event_data) {
                        LOGW("Fail to remove idle event. The data is NULL");
@@ -1469,7 +1481,7 @@ static void _player_event_queue_add(player_event_queue * ev, _player_cb_data * d
        }
 }
 
-static void _user_callback_handler(callback_cb_info_s * cb_info, muse_player_event_e event, _player_recv_data *recv_data)
+static bool _user_callback_handler(callback_cb_info_s * cb_info, muse_player_event_e event, _player_recv_data *recv_data)
 {
        /* LOGD("get event %d", event); */
 
@@ -1479,15 +1491,20 @@ static void _user_callback_handler(callback_cb_info_s * cb_info, muse_player_eve
                        data = g_new(_player_cb_data, 1);
                        if (!data) {
                                LOGE("fail to alloc mem");
-                               return;
+                               return false;
                        }
                        data->int_data = (int)event;
                        data->cb_info = cb_info;
                        data->recv_data = recv_data;
                        g_mutex_init(&data->event_mutex);
                        _player_event_queue_add(&cb_info->event_queue, data);
+
+                       return true;
                }
        }
+
+       LOGE("failed to add event to queue");
+       return false;
 }
 
 static void _add_ret_msg(muse_player_api_e api, callback_cb_info_s * cb_info, int offset, int parse_len)
@@ -1624,8 +1641,14 @@ static void *client_cb_handler(gpointer data)
                                                        break;
                                                }
                                                g_mutex_unlock(&cb_info->player_mutex);
-                                               if (muse_core_msg_json_object_get_value("event", jobj, &event, MUSE_TYPE_INT))
-                                                       _user_callback_handler(cb_info, event, recv_data);
+                                               if (!muse_core_msg_json_object_get_value("event", jobj, &event, MUSE_TYPE_INT) ||
+                                                       !_user_callback_handler(cb_info, event, recv_data)) {
+                                                       LOGE("failed to get value or add event to the queue.");
+                                                       if (recv_data) {
+                                                               g_free(recv_data->buffer);
+                                                               g_free(recv_data);
+                                                       }
+                                               }
                                        } else if (api == MUSE_PLAYER_CB_CREATE_ACK) {
                                                g_mutex_lock(&cb_info->player_mutex);
                                                cb_info->buff.recved++;