Gdk.Pixbuf утечка памяти в Vala или что-то еще? - PullRequest
1 голос
/ 13 сентября 2010

вот простой вопрос. Можете ли вы помочь мне найти утечку памяти в этом коде Vala? Если это поможет, я могу опубликовать сгенерированный код C тоже ^^

using GLib;
using Gtk;
using Gee;

void test1 () 
{
    Gee.ArrayList<Gdk.Pixbuf> list = new Gee.ArrayList<Gdk.Pixbuf>();

    for( int a = 0; a < 10000; a++)
    {
        string path = "/usr/share/icons/gnome/48x48/stock/data/stock_lock.png";

        list.add( new Gdk.Pixbuf.from_file( path ) );
    }

    list.clear(); 

    // when the function returns it *should* free all alocated memory, or am I missing something?            
}

int main (string[] args) 
{
    Gtk.init( ref args);

    // the memory usage here is ~3mb
    test1();
    // here it is ~94mb

    Gtk.main();
    return 0;
}

1 Ответ

1 голос
/ 03 ноября 2010

Я воспроизвел это на последних версиях Vala (0.10.1 и 0.11.1). Я просмотрел код .c, который генерирует valac, и не вижу там явной проблемы, хотя очевидно, что pixbuf протекает (valgrind подтверждает это). Я сообщил об этом как об ошибке здесь:

https://bugzilla.gnome.org/show_bug.cgi?id=633869

Обновление : ошибка закрыта. Расследование показывает, что утечки памяти как таковой нет, но (наиболее вероятно), что память выделяется и удерживается, когда она освобождается с помощью дополнительного распределителя или чего-то подобного. Как отметил Эван, если вы вызываете тестовую функцию в цикле, общий объем памяти никогда не превышает 90 МБ, что указывает на то, что не утечка памяти.

...