Glib:创建 GDBusProxy 时内存泄漏
Glib: Memory leak when creating GDBusProxy
我正在尝试使用 linux
中的 Glib-Dbus
调用 NetworkManager
的 DBus
方法。当我通过 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;
}
提前致谢
您可以使用 Valgrind 找出程序中的内存泄漏。
GLib 和相关库不使用系统 malloc/free
对;他们通常求助于内部平板分配器。这意味着仅读取 top
或 pmap
的输出对于确定 GLib 或任何使用 GLib 的应用程序是否实际泄漏没有任何用处:
您应该使用 Valgrind, instead, and make sure to read this wiki page 了解有关如何在使用 GLib 的应用程序中使用 Valgrind 的一些详细信息。
此错误报告附带了一个补丁(已应用于 glib git 存储库)应该可以解决您的问题:
https://bugzilla.gnome.org/show_bug.cgi?id=758641
推测它会在 glib-2.46.3 and/or glib-2.48 中。好像只是被合并到glib-2.46分支了。
我正在尝试使用 linux
中的 Glib-Dbus
调用 NetworkManager
的 DBus
方法。当我通过 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; }
提前致谢
您可以使用 Valgrind 找出程序中的内存泄漏。
GLib 和相关库不使用系统 malloc/free
对;他们通常求助于内部平板分配器。这意味着仅读取 top
或 pmap
的输出对于确定 GLib 或任何使用 GLib 的应用程序是否实际泄漏没有任何用处:
您应该使用 Valgrind, instead, and make sure to read this wiki page 了解有关如何在使用 GLib 的应用程序中使用 Valgrind 的一些详细信息。
此错误报告附带了一个补丁(已应用于 glib git 存储库)应该可以解决您的问题: https://bugzilla.gnome.org/show_bug.cgi?id=758641
推测它会在 glib-2.46.3 and/or glib-2.48 中。好像只是被合并到glib-2.46分支了。