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;
}
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);
(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);
}
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");
}
}
-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); */
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)
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++;