Gtk+/GObject memory management, continued
Sep. 7th, 2009 01:08 amВ продолжение предыдущего поста.
Переписал управление памятью в cl-gtk2. Решил несколько проблем:
Остался один непонятный момент, связанный с использованием GtkBuilder'а. По неясным пока причинам, на объекты, созданные GtkBuilder'ом остаются лишние ссылки. Но это уже предмет дальнейшего разбирательства.
Переписал управление памятью в cl-gtk2. Решил несколько проблем:
- Денатурация объектов. Когда мы передаем ссылку на объект типа custom-window (о котором GObject/Gtk+ ничего не знает), то ожидаем, что обратно вернется объект типа custom-window со всеми его полями, а не объект типа gtk-window. Преобразование объекта к базовому типу и есть денатурация.
- Не всегда верный подсчет ссылок. В некоторых случаях, к объектам добавлялись лишние ссылки, что приводило к тому, что не все объекты были собраны сборщиком.
- Создание объектов классов, реализованных в Gtk+ и объектов классов-наследников GObject, определенных в лиспе, происходило немного по-разному.
- Некоторые функции Gtk+ возвращают объекты с уже добавленной ссылкой (увеличенным на единицу счетчиком ссылок). Например, gdk_gc_new и gtk_widget_create_pango_layout. Это не учитывалось, что создавало утечки.
Остался один непонятный момент, связанный с использованием GtkBuilder'а. По неясным пока причинам, на объекты, созданные GtkBuilder'ом остаются лишние ссылки. Но это уже предмет дальнейшего разбирательства.