Неоднократное добавление и удаление строк из списка в конечном итоге приводит к сбою с SIGSEGV - PullRequest
1 голос
/ 06 августа 2020

Я новичок в Go и GTK, и у меня возникла проблема с непредсказуемым сбоем приложения при операциях GUI - обычно при добавлении строки в список. Я думаю, что я свел проблему к этому простому примеру приложения, которое переключается между добавлением и удалением строк в / из ListBox. Если вы дадите ему поработать несколько минут, он в конечном итоге выдаст SIGSEGV.


import (
    "github.com/gotk3/gotk3/glib"
    "github.com/gotk3/gotk3/gtk"
)

func main() {
    gtk.Init(nil)
    win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
    box, _ := gtk.ListBoxNew()
    win.Add(box)
    win.SetDefaultSize(200, 800)
    win.ShowAll()
    glib.IdleAdd(testAddRows, box)
    gtk.Main()
}

func testAddRows(box *gtk.ListBox) bool {
    for i:=0; i<40; i++ {
        label, _ := gtk.LabelNew("SPAM")
        row, _ := gtk.ListBoxRowNew()
        row.Add(label)
        box.Add(row)
        label.Show()
        row.Show()
    }
    glib.IdleAdd(testDeleteRows, box)
    return false
}

func testDeleteRows(box *gtk.ListBox) bool {
    for {
        row := box.GetRowAtIndex(0)
        if row == nil {
            break
        }
        box.Remove(row)
    }
    glib.IdleAdd(testAddRows, box)
    return false
}

Может ли кто-нибудь обнаружить проблему с этим кодом? Я использую привязки Go 1.13, GTK 3 и gotk3.

...