【问题标题】:Glib: Memory leak when creating GDBusProxyGlib:创建 GDBusProxy 时的内存泄漏
【发布时间】:2015-07-01 14:50:03
【问题描述】:

我正在尝试通过在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 * 连接 = NULL; GDBusProxy * 代理 = NULL; GError * 错误 = NULL; 连接 = g_bus_get_sync(G_BUS_TYPE_SYSTEM, 空值, &错误); g_assert_no_error(错误); 错误=空; 而 (1) { 代理 = g_dbus_proxy_new_sync(连接, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, 空值, "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/设置", "org.freedesktop .NetworkManager.Settings", 空值, 空值); g_assert(代理!= NULL); g_object_unref(代理); } g_object_unref(连接); 返回0; }

提前致谢

【问题讨论】:

    标签: c linux glib dbus


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        大概会在 glib-2.46.3 和/或 glib-2.48 中。好像刚刚被合并到了glib-2.46分支中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-06
          • 2016-12-24
          • 1970-01-01
          相关资源
          最近更新 更多