Skip to content

Application crashes sometimes in RedrawTerminal #47

@Peter2121

Description

@Peter2121

...with the following error in console:

panic: interface conversion: gowid.RenderFixed is not gowid.IRenderWithWeight: missing method Weight
goroutine 1 [running]:
github.com/gcla/gowid/widgets/columns.widgetWidthsExt({0x828115490, 0xc000177130}, {0xc0015141e0, 0xa, 0xa}, {0xc001514280, 0xa, 0xa}, {0x264e20, 0xc000a4a080}, ...)
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/columns/columns.go:550 +0xc98
github.com/gcla/gowid/widgets/columns.WidgetWidths({0x2ccda0, 0xc000177130}, {0x264e20, 0xc000a4a080}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/columns/columns.go:430 +0x19a
github.com/gcla/gowid/widgets/columns.(*Widget).WidgetWidths(0xc000177130, {0x264e20, 0xc000a4a080}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/columns/columns.go:225 +0x8e
github.com/gcla/gowid/widgets/columns.RenderSubWidgets({0x2d2488, 0xc000177130}, {0x264e20, 0xc000a4a080}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/columns/columns.go:665 +0x156
github.com/gcla/gowid/widgets/columns.(*Widget).RenderSubWidgets(0xc000177130, {0x264e20, 0xc000a4a080}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/columns/columns.go:214 +0x8e
github.com/gcla/gowid/widgets/columns.Render({0x2d2488, 0xc000177130}, {0x264e20, 0xc000a4a080}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/columns/columns.go:620 +0x13c
github.com/gcla/gowid/widgets/columns.(*Widget).Render(0xc000177130, {0x264e20, 0xc000a4a080}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/columns/columns.go:210 +0x78
github.com/gcla/gowid/widgets/pile.RenderSubwidgets.func1({0x2cdd98, 0xc0001c98e0}, {0x264e20, 0xc000a4a080}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:495 +0x72
github.com/gcla/gowid/widgets/pile.BoxMakerFunc.MakeBox(0x28cfa0, {0x2cdd98, 0xc0001c98e0}, {0x264e20, 0xc000a4a080}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:516 +0x84
github.com/gcla/gowid/widgets/pile.RenderBoxMaker({0x2d2550, 0xc0001d4280}, {0x264e20, 0xc000a4a050}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500}, {0x2ca6e0, ...})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:583 +0x710
github.com/gcla/gowid/widgets/pile.(*Widget).RenderBoxMaker(0xc0001d4280, {0x264e20, 0xc000a4a050}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500}, {0x2ca6e0, 0x28cfa0})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:219 +0xbf
github.com/gcla/gowid/widgets/pile.RenderSubwidgets({0x2d2550, 0xc0001d4280}, {0x264e20, 0xc000a4a050}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:498 +0xba
github.com/gcla/gowid/widgets/pile.(*Widget).RenderSubWidgets(0xc0001d4280, {0x264e20, 0xc000a4a050}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:211 +0x8e
github.com/gcla/gowid/widgets/pile.Render({0x2d2550, 0xc0001d4280}, {0x264e20, 0xc000a4a050}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:444 +0xc2
github.com/gcla/gowid/widgets/pile.(*Widget).Render(0xc0001d4280, {0x264e20, 0xc000a4a050}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:198 +0x78
github.com/gcla/gowid/widgets/pile.RenderSubwidgets.func1({0x2cdd98, 0xc0001c99a0}, {0x264e20, 0xc000a4a050}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:495 +0x72
github.com/gcla/gowid/widgets/pile.BoxMakerFunc.MakeBox(0x28cfa0, {0x2cdd98, 0xc0001c99a0}, {0x264e20, 0xc000a4a050}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:516 +0x84
github.com/gcla/gowid/widgets/pile.RenderBoxMaker({0x2d2550, 0xc0001d4300}, {0x264e20, 0xc000a4a000}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500}, {0x2ca6e0, ...})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:658 +0xba2
github.com/gcla/gowid/widgets/pile.(*Widget).RenderBoxMaker(0xc0001d4300, {0x264e20, 0xc000a4a000}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500}, {0x2ca6e0, 0x28cfa0})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:219 +0xbf
github.com/gcla/gowid/widgets/pile.RenderSubwidgets({0x2d2550, 0xc0001d4300}, {0x264e20, 0xc000a4a000}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:498 +0xba
github.com/gcla/gowid/widgets/pile.(*Widget).RenderSubWidgets(0xc0001d4300, {0x264e20, 0xc000a4a000}, {0x0, 0x0}, 0x0, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:211 +0x8e
github.com/gcla/gowid/widgets/pile.Render({0x2d2550, 0xc0001d4300}, {0x264e20, 0xc000a4a000}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:444 +0xc2
github.com/gcla/gowid/widgets/pile.(*Widget).Render(0xc0001d4300, {0x264e20, 0xc000a4a000}, {0x0, 0x0}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/pile/pile.go:198 +0x78
github.com/gcla/gowid/widgets/overlay.Render({0x2d0780, 0xc00155ed20}, {0x264e20, 0xc000a4a000}, {0x1, 0x1}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/overlay/overlay.go:304 +0xf9
github.com/gcla/gowid/widgets/overlay.(*Widget).Render(0xc00155ed20, {0x264e20, 0xc000a4a000}, {0x1, 0x1}, {0x2d2618, 0xc000194500})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/widgets/overlay/overlay.go:226 +0x78
github.com/gcla/gowid.RenderRoot({0x2ce000, 0xc0001c9a20}, 0xc000194500)
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/support.go:835 +0xfa
github.com/gcla/gowid.(*App).RedrawTerminal(0xc000194500)
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/app.go:719 +0x3d
github.com/gcla/gowid.(*App).HandleTCellEvent(0xc000194500, {0x255280, 0xc000933e40}, {0x2ca900, 0x869498})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/app.go:501 +0xadd
github.com/gcla/gowid.(*App).handleEvents(0xc000194500, {0x2ca900, 0x869498})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/app.go:675 +0x145
github.com/gcla/gowid.(*App).MainLoop(0xc000194500, {0x2ca900, 0x869498})
        /root/go/pkg/mod/github.com/gcla/gowid@v1.4.1-0.20220717013040-1d7a75b6f5cb/app.go:656 +0x129
main.main()
        /root/cbsd-tui/cbsd-tui.go:1265 +0x32b2

cbsd-tui.go:1265 is just app.MainLoop(handler{})

The problem arrives when I update a dialog (with edit widget inside) in cycle showing the output of a command as it comes. The dialog is created as follows:

func CreateActionsLogDialog(editWidget *edit.Widget) *dialog.Widget {
	baheight := cbsdJailConsole.Height()
	ba := boxadapter.New(
		styled.New(
			NewEditWithScrollbar(editWidget),
			gowid.MakePaletteRef("white"),
		),
		baheight,
	)
	actionlogdialog := dialog.New(
		framed.NewUnicode(ba),
		dialog.Options{
			Buttons:         []dialog.Button{dialog.CloseD},
			Modal:           true,
			NoShadow:        true,
			TabToButtons:    true,
			BackgroundStyle: gowid.MakePaletteRef("bluebg"),
			BorderStyle:     gowid.MakePaletteRef("dialog"),
			ButtonStyle:     gowid.MakePaletteRef("white-focus"),
			FocusOnWidget:   true,
		},
	)
	return actionlogdialog
}

NewEditWithScrollbar is taken from editor example.

I suppose that there are some race conditions somewhere...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions