Glib:创建GDBusProxy时内存泄漏

问题描述 投票:0回答:3

我试图通过在

DBus
中使用
NetworkManager
来调用
Glib-Dbus
linux
方法。当我通过
g_dbus_proxy_new_sync
创建一个 GDBusProxy 然后通过 g_object_unref 释放它时,新创建的
GDBusProxy
似乎没有被释放。我使用
pmap -x <pid>
显示进程的内存使用情况,并且
RSS
值不断增加。有人可以帮助我吗?

这是导致问题的代码:

int main (int argc, char *argv[])
{
    GDBusConnection * connection = NULL;
    GDBusProxy * proxy = NULL;
    GError * error = NULL;

    connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM,
                                NULL,
                                &error);
    g_assert_no_error(error);
    error = NULL;

    while (1)
    {
        proxy = g_dbus_proxy_new_sync(connection,
                                      G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |      G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
                                      NULL,
                                      "org.freedesktop.NetworkManager",
                                      "/org/freedesktop/NetworkManager/Settings",
                                      "org.freedesktop    .NetworkManager.Settings",
                                      NULL,
                                      NULL);

        g_assert(proxy != NULL);
        g_object_unref(proxy);

    }

    g_object_unref(connection);

    return 0;
}
c linux memory-leaks glib dbus
3个回答
3
投票

GLib 和相关库不使用系统

malloc/free
对;他们通常求助于内部slab分配器。这意味着仅读取
top
pmap
的输出对于确定 GLib 或任何使用 GLib 的应用程序是否实际上泄漏没有任何用处:

您应该使用 Valgrind,并确保阅读 此 wiki 页面,了解有关如何在使用 GLib 的应用程序中使用 Valgrind 的一些详细信息。


0
投票

此错误报告附加了一个补丁(已应用于 glib git 存储库),它应该可以解决您的问题: https://bugzilla.gnome.org/show_bug.cgi?id=758641

大概它会在 glib-2.46.3 和/或 glib-2.48 中。 它似乎只是被合并到 glib-2.46 分支中。


0
投票

您可以使用 Valgrind 来找出程序中的内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.