我正试图在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; }
提前致谢
答案 0 :(得分:2)
GLib和相关库不使用系统malloc/free
对;他们通常采用内部板块分配器。这意味着只读取top
或pmap
的输出对于确定GLib或使用GLib的任何应用程序是否实际泄漏没有任何帮助:
您应该使用Valgrind,并确保阅读this wiki page以获取有关如何将Valgrind与使用GLib的应用程序一起使用的一些详细信息。
答案 1 :(得分:1)
您可以使用Valgrind查找程序中的内存泄漏。
答案 2 :(得分:0)
此错误报告附带了一个补丁(已应用于glib git存储库),它可以解决您的问题: https://bugzilla.gnome.org/show_bug.cgi?id=758641
据推测,它将在glib-2.46.3和/或glib-2.48中。它似乎只是在glib-2.46分支中合并。