From 9257fc0528c9aa51fac0f6df871344d8d386c26e Mon Sep 17 00:00:00 2001 From: Seungbae Shin Date: Thu, 23 Sep 2021 21:11:14 +0900 Subject: [PATCH] Fix memory leak in case of stopping playback [Version] 0.3.6 [Issue Type] Bug Change-Id: Ic3c4bc7378373909580ade0a261378a2031744dd --- packaging/capi-media-wav-player.spec | 2 +- src/wav_player_private.c | 25 ++++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/packaging/capi-media-wav-player.spec b/packaging/capi-media-wav-player.spec index f407674..4350dc8 100755 --- a/packaging/capi-media-wav-player.spec +++ b/packaging/capi-media-wav-player.spec @@ -1,6 +1,6 @@ Name: capi-media-wav-player Summary: A wav player library in Tizen C API -Version: 0.3.5 +Version: 0.3.6 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/wav_player_private.c b/src/wav_player_private.c index e7899cb..978ed5d 100755 --- a/src/wav_player_private.c +++ b/src/wav_player_private.c @@ -77,24 +77,31 @@ static void __internal_complete_cb(GDBusConnection *connection, GVariant *params, gpointer userdata) { - int handle; + gint handle = -1; + gboolean stopped_by_user = FALSE; struct dbus_cb_data *dbus_data = (struct dbus_cb_data *)userdata; - g_variant_get(params, "(i)", &handle); - if (!dbus_data) { - LOGE("dbus data is null. handle(%d)", handle); + LOGE("dbus data is null"); return; } - if (handle == dbus_data->handle) { - g_dbus_connection_signal_unsubscribe(dbus_data->conn, dbus_data->subs_id); - g_object_unref(dbus_data->conn); + g_variant_get(params, "(ib)", &handle, &stopped_by_user); + LOGI("expected handle(%d) callback(%p), incoming handle(%d), stopped_by_user(%d)", + dbus_data->handle, dbus_data->cb, handle, stopped_by_user); + + if (handle != dbus_data->handle) + return; + + g_dbus_connection_signal_unsubscribe(dbus_data->conn, dbus_data->subs_id); + g_object_unref(dbus_data->conn); - LOGD("user callback for handle(%d) cb(%p)", handle, dbus_data->cb); + if (!stopped_by_user) { + LOGI("Invoking user callback for handle(%d) cb(%p)", handle, dbus_data->cb); dbus_data->cb(handle, dbus_data->user_data); - g_free(dbus_data); } + + g_free(dbus_data); } int _wav_play_sound(const char *path, sound_stream_info_h stream_info, unsigned loop_count, -- 2.7.4