From: Eunhye Choi Date: Thu, 10 Jun 2021 09:24:35 +0000 (+0900) Subject: [0.3.142] fix memory leak X-Git-Tag: submit/tizen/20210616.025147^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F71%2F259771%2F1;p=platform%2Fcore%2Fapi%2Fplayer.git [0.3.142] fix memory leak Change-Id: I7836b3fa435a2cea50b855f1a6266494ec80c298 --- diff --git a/packaging/capi-media-player.spec b/packaging/capi-media-player.spec index 238f946..5e13c91 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.141 +Version: 0.3.142 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/player.c b/src/player.c index 0466bb4..1081f01 100644 --- a/src/player.c +++ b/src/player.c @@ -1363,7 +1363,7 @@ static bool _player_need_sync_context(int event_id) } } -static void _destroy_notify_cb(gpointer user_data) +static void _destroy_event_data(gpointer user_data) { _player_cb_data *data = (_player_cb_data *)user_data; @@ -1408,54 +1408,53 @@ static void *_player_event_queue_loop(void *param) g_mutex_lock(&ev->qlock); event_data = (_player_cb_data *)g_queue_pop_head(ev->queue); g_mutex_unlock(&ev->qlock); - if (event_data) { - muse_player_event_e event_type = event_data->int_data; - - if (event_type == MUSE_PLAYER_EVENT_TYPE_SEEK) { - g_mutex_lock(&cb_info->seek_cb_mutex); - if (cb_info->seek_cb_state == PLAYER_SEEK_CB_STATE_WAIT) { - /* push event into queue again. */ - _player_event_queue_add(ev, event_data); - g_mutex_unlock(&cb_info->seek_cb_mutex); - break; - } + + if (!event_data) + break; + + muse_player_event_e event_type = event_data->int_data; + + if (event_type == MUSE_PLAYER_EVENT_TYPE_SEEK) { + g_mutex_lock(&cb_info->seek_cb_mutex); + if (cb_info->seek_cb_state == PLAYER_SEEK_CB_STATE_WAIT) { + /* push event into queue again. */ + _player_event_queue_add(ev, event_data); g_mutex_unlock(&cb_info->seek_cb_mutex); - } else if (event_type == MUSE_PLAYER_EVENT_TYPE_BUFFERING) { - g_mutex_lock(&cb_info->buffering_cb_mutex); - if (cb_info->drop_buffering_message) { - LOGD("Drop buffering event"); - g_mutex_unlock(&cb_info->buffering_cb_mutex); - break; - } + break; + } + g_mutex_unlock(&cb_info->seek_cb_mutex); + } else if (event_type == MUSE_PLAYER_EVENT_TYPE_BUFFERING) { + g_mutex_lock(&cb_info->buffering_cb_mutex); + if (cb_info->drop_buffering_message) { + LOGD("Drop buffering event"); g_mutex_unlock(&cb_info->buffering_cb_mutex); + + _destroy_event_data(event_data); + break; } + g_mutex_unlock(&cb_info->buffering_cb_mutex); + } - if (_player_need_sync_context(event_type)) { - if ((cb_info->user_cb[event_type] || (event_type == MUSE_PLAYER_EVENT_TYPE_SERVICE_DISCONNECTED)) && - _user_callbacks[event_type]) { - 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); - - LOGD("add ev %d to main loop", event_type); - - g_idle_add_full(G_PRIORITY_DEFAULT, - (GSourceFunc)_player_event_job_function, - (gpointer)event_data, - (GDestroyNotify)_destroy_notify_cb); - } else { - LOGW("there is no registered cb for ev:%d", event_type); - if (event_data->recv_data) { - g_free(event_data->recv_data->buffer); - g_free(event_data->recv_data); - } - g_free(event_data); - } + if (_player_need_sync_context(event_type)) { + if ((cb_info->user_cb[event_type] || (event_type == MUSE_PLAYER_EVENT_TYPE_SERVICE_DISCONNECTED)) && + _user_callbacks[event_type]) { + 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); + + LOGD("add ev %d to main loop", event_type); + + g_idle_add_full(G_PRIORITY_DEFAULT, + (GSourceFunc)_player_event_job_function, + (gpointer)event_data, + (GDestroyNotify)_destroy_event_data); } else { - _player_event_job_function(event_data); + LOGW("there is no registered cb for ev:%d", event_type); + _destroy_event_data(event_data); } } else { - break; + _player_event_job_function(event_data); + _destroy_event_data(event_data); } } }