[0.3.142] fix memory leak 71/259771/1 accepted/tizen/unified/20210624.131900 submit/tizen/20210616.025147 submit/tizen/20210621.051655
authorEunhye Choi <eunhae1.choi@samsung.com>
Thu, 10 Jun 2021 09:24:35 +0000 (18:24 +0900)
committerEunhye Choi <eunhae1.choi@samsung.com>
Mon, 14 Jun 2021 03:42:28 +0000 (12:42 +0900)
Change-Id: I7836b3fa435a2cea50b855f1a6266494ec80c298

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

index 238f946..5e13c91 100644 (file)
@@ -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
index 0466bb4..1081f01 100644 (file)
@@ -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);
                        }
                }
        }