首页 文章

Glib:创建GDBusProxy时内存泄漏

提问于
浏览
0

我想在 linux 中使用 Glib-Dbus 来调用 NetworkManagerDBus 方法 . 当我通过 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;
    }

提前致谢

3 回答

  • 0

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

    据推测它将在glib-2.46.3和/或glib-2.48中 . 似乎只是在glib-2.46分支中合并 .

  • 1

    GLib和相关库不使用系统 malloc/free 对;他们通常采用内部板块分配器 . 这意味着只读取 toppmap 的输出对于确定GLib或使用GLib的任何应用程序是否实际泄漏没有任何帮助:

    您应该使用Valgrind,并确保阅读this wiki page以获取有关如何将Valgrind与使用GLib的应用程序一起使用的一些详细信息 .

  • 2

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

相关问题