2015-04-23 17 views
0

我試圖使用Glib-Dbus中的linux來調用DBus方法NetworkManager。當我創建一個GDBusProxyg_dbus_proxy_new_sync然後釋放它g_object_unref,新創建的GDBusProxy似乎不被釋放。我用pmap -x <pid>來顯示我的進程內存使用情況,並且RSS值不斷增加。有人能幫我嗎?Glib:創建GDBusProxy時發生內存泄露

這是導致該問題的代碼:

 

    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; 
    } 

在此先感謝

回答

1

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

2

GLib和相關庫不使用系統malloc/free對;他們通常使用內部的slab分配器。這意味着,僅僅閱讀的toppmap輸出不以任何方式有助於確定是否GLib的,或使用GLib的任何應用程序,實際上是泄露:

您應該使用Valgrind,相反,並確保閱讀this wiki page爲關於如何在使用GLib的應用程序中使用Valgrind的一些細節。

0

存在附加到這個bug報告(已被應用到油嘴git倉庫),這應該解決您的問題的補丁: https://bugzilla.gnome.org/show_bug.cgi?id=758641

據推測這將是巧舌如簧-2.46.3和/或油嘴-2.48。似乎只是合併在glib-2.46分支中。