Fix memory leaks caused by unhandling result of dbus method call 41/246341/1 accepted/tizen/unified/20201102.124418 submit/tizen/20201029.032905
authorSeungbae Shin <seungbae.shin@samsung.com>
Wed, 28 Oct 2020 10:33:05 +0000 (19:33 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Wed, 28 Oct 2020 10:33:05 +0000 (19:33 +0900)
[Version] 0.6.30
[Issue Type] Bug

Change-Id: I6a22ed4ceb6e8ad5f287579b9e6ada6605147125

packaging/capi-media-sound-manager.spec
src/sound_manager_private.c

index 67a949c..eeba2a7 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-sound-manager
 Summary:    Sound Manager library
-Version:    0.6.29
+Version:    0.6.30
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 48988c5..5cec52b 100644 (file)
@@ -1696,6 +1696,7 @@ int _set_sample_format(int device_id, sound_sample_format_e format)
 {
        int ret = SOUND_MANAGER_ERROR_NONE;
        GDBusConnection *conn = NULL;
+       GVariant *result = NULL;
        GError *err = NULL;
        char *format_str = NULL;
 
@@ -1705,7 +1706,7 @@ int _set_sample_format(int device_id, sound_sample_format_e format)
        if ((ret = _convert_sample_format_enum_to_str(format, &format_str)) != SOUND_MANAGER_ERROR_NONE)
                return ret;
 
-       g_dbus_connection_call_sync(conn,
+       result = g_dbus_connection_call_sync(conn,
                                                PA_BUS_NAME,
                                                PA_DEVICE_MANAGER_OBJECT_PATH,
                                                PA_DEVICE_MANAGER_INTERFACE,
@@ -1718,10 +1719,13 @@ int _set_sample_format(int device_id, sound_sample_format_e format)
                                                &err);
        if (err) {
                LOGE("g_dbus_connection_call_sync() for SET_SAMPLE_FORMAT error (%s)", err->message);
-               ret = _convert_sound_manager_error_code(__func__, _convert_dbus_error(err ? err->message : NULL));
+               ret = _convert_sound_manager_error_code(__func__, _convert_dbus_error(err->message));
                g_error_free(err);
        }
 
+       if (result)
+               g_variant_unref(result);
+
        g_object_unref(conn);
 
        return ret;
@@ -1856,6 +1860,7 @@ int _set_sample_rate(int device_id, sound_sample_rate_e rate)
 {
        int ret = SOUND_MANAGER_ERROR_NONE;
        GDBusConnection *conn = NULL;
+       GVariant *result = NULL;
        GError *err = NULL;
        unsigned int _rate;
 
@@ -1865,7 +1870,7 @@ int _set_sample_rate(int device_id, sound_sample_rate_e rate)
        if ((ret = _convert_sample_rate_enum_to_uint(rate, &_rate)) != SOUND_MANAGER_ERROR_NONE)
                return ret;
 
-       g_dbus_connection_call_sync(conn,
+       result = g_dbus_connection_call_sync(conn,
                                                PA_BUS_NAME,
                                                PA_DEVICE_MANAGER_OBJECT_PATH,
                                                PA_DEVICE_MANAGER_INTERFACE,
@@ -1882,6 +1887,9 @@ int _set_sample_rate(int device_id, sound_sample_rate_e rate)
                g_error_free(err);
        }
 
+       if (result)
+               g_variant_unref(result);
+
        g_object_unref(conn);
 
        return ret;
@@ -1935,12 +1943,13 @@ int _set_avoid_resampling(int device_id, bool enable)
 {
        int ret = SOUND_MANAGER_ERROR_NONE;
        GDBusConnection *conn = NULL;
+       GVariant *result = NULL;
        GError *err = NULL;
 
        if ((ret = __get_dbus_connection(&conn)) != SOUND_MANAGER_ERROR_NONE)
                return ret;
 
-       g_dbus_connection_call_sync(conn,
+       result = g_dbus_connection_call_sync(conn,
                                                PA_BUS_NAME,
                                                PA_DEVICE_MANAGER_OBJECT_PATH,
                                                PA_DEVICE_MANAGER_INTERFACE,
@@ -1957,6 +1966,9 @@ int _set_avoid_resampling(int device_id, bool enable)
                g_error_free(err);
        }
 
+       if (result)
+               g_variant_unref(result);
+
        g_object_unref(conn);
 
        return ret;
@@ -2011,6 +2023,7 @@ int _set_media_stream_only(int device_id, bool enable)
 {
        int ret = SOUND_MANAGER_ERROR_NONE;
        GDBusConnection *conn = NULL;
+       GVariant *result = NULL;
        GError *err = NULL;
        const char *stream_type;
 
@@ -2022,7 +2035,7 @@ int _set_media_stream_only(int device_id, bool enable)
        else
                stream_type = "none";
 
-       g_dbus_connection_call_sync(conn,
+       result = g_dbus_connection_call_sync(conn,
                                                PA_BUS_NAME,
                                                PA_DEVICE_MANAGER_OBJECT_PATH,
                                                PA_DEVICE_MANAGER_INTERFACE,
@@ -2039,6 +2052,9 @@ int _set_media_stream_only(int device_id, bool enable)
                g_error_free(err);
        }
 
+       if (result)
+               g_variant_unref(result);
+
        g_object_unref(conn);
 
        return ret;
@@ -3182,7 +3198,6 @@ int _activate_ducking(uint32_t stream_index, bool enable, const char *target_str
        }
 
        g_variant_get(result, "(&s)", &dbus_ret);
-
        if (!strncmp("STREAM_MANAGER_RETURN_ERROR_INVALID_STATE", dbus_ret, strlen(dbus_ret)))
                ret = SOUND_MANAGER_ERROR_INVALID_STATE;
        else if (strncmp("STREAM_MANAGER_RETURN_OK", dbus_ret, strlen(dbus_ret)))