fyne-io / fyne

Cross platform GUI toolkit in Go inspired by Material Design
https://fyne.io/
Other
24.76k stars 1.37k forks source link

Intermittent unexpected signal when closing window from code #3874

Open tim-timpani opened 1 year ago

tim-timpani commented 1 year ago

Checklist

Describe the bug

Very intermittent. Not specific to any one app I am working on. This one happened just as I clicked on the "okButton" defined in ShowTestCaseDetails() in the sample code below

How to reproduce

I just clicked on the "okButton" to close the window

Screenshots

Stack Trace:

fatal error: unexpected signal during runtime execution [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x0]

runtime stack: runtime.throw({0x4de62c2?, 0x4c724aa?}) /usr/local/go/src/runtime/panic.go:992 +0x71 runtime.sigpanic() /usr/local/go/src/runtime/signal_unix.go:802 +0x20e

goroutine 37 [syscall, locked to thread]: runtime.cgocall(0x4c736b0, 0xc00056de48) /usr/local/go/src/runtime/cgocall.go:157 +0x5c fp=0xc00056de08 sp=0xc00056ddd0 pc=0x400917c github.com/go-gl/glfw/v3.3/glfw._Cfunc_glfwMakeContextCurrent(0x0) _cgo_gotypes.go:1451 +0x45 fp=0xc00056de48 sp=0xc00056de08 pc=0x4bfbba5 github.com/go-gl/glfw/v3.3/glfw.DetachCurrentContext() /Users/timothy3/go/pkg/mod/github.com/go-gl/glfw/v3.3/glfw@v0.0.0-20221017161538-93cebf72946b/context.go:23 +0x25 fp=0xc00056de60 sp=0xc00056de48 pc=0x4bfe405 fyne.io/fyne/v2/internal/driver/glfw.(window).DetachCurrentContext(0xc0020d03c0) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/window_desktop.go:637 +0x1c fp=0xc00056de70 sp=0xc00056de60 pc=0x4c29fdc fyne.io/fyne/v2/internal/driver/glfw.(window).RunWithContext(0xc0020d03c0, 0xc00055e250) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/window.go:909 +0x65 fp=0xc00056de98 sp=0xc00056de70 pc=0x4c25205 fyne.io/fyne/v2/internal/driver/glfw.(gLDriver).startDrawThread.func1() /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/loop.go:238 +0x23b fp=0xc00056dfe0 sp=0xc00056de98 pc=0x4c18cfb runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:1571 +0x1 fp=0xc00056dfe8 sp=0xc00056dfe0 pc=0x406ec81 created by fyne.io/fyne/v2/internal/driver/glfw.(gLDriver).startDrawThread /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/loop.go:230 +0x15b

goroutine 1 [runnable, locked to thread]: github.com/go-gl/glfw/v3.3/glfw.panicError() /Users/timothy3/go/pkg/mod/github.com/go-gl/glfw/v3.3/glfw@v0.0.0-20221017161538-93cebf72946b/error.go:184 +0x7b github.com/go-gl/glfw/v3.3/glfw.(Window).ShouldClose(0xc000a46000) /Users/timothy3/go/pkg/mod/github.com/go-gl/glfw/v3.3/glfw@v0.0.0-20221017161538-93cebf72946b/window.go:371 +0x3a fyne.io/fyne/v2/internal/driver/glfw.(gLDriver).runGL(0xc0004cec40) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/loop.go:147 +0x50a fyne.io/fyne/v2/internal/driver/glfw.(gLDriver).Run(0xc0004cec40) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/driver.go:169 +0x9b fyne.io/fyne/v2/app.(fyneApp).Run(0xc0001d81b0) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/app/app.go:74 +0x58 pipeline/gui.Run() /Users/timothy3/git/pipeline/gui/start.go:105 +0x602 main.main() /Users/timothy3/git/pipeline/main/pipeline.go:6 +0x17

goroutine 35 [syscall]: syscall.syscall6(0x0?, 0x0?, 0x0?, 0x0?, 0x0?, 0x0?, 0x0?) /usr/local/go/src/runtime/sys_darwin.go:44 +0x99 golang.org/x/sys/unix.kevent(0x3, 0x0, 0x0, 0xc00006be70, 0xa, 0x5b04e30) /Users/timothy3/go/pkg/mod/golang.org/x/sys@v0.7.0/unix/zsyscall_darwin_amd64.go:276 +0xba golang.org/x/sys/unix.Kevent(0x3, {0x0, 0x0, 0x0}, {0xc00006be70, 0xa, 0xa}, 0x5b04e30) /Users/timothy3/go/pkg/mod/golang.org/x/sys@v0.7.0/unix/syscall_bsd.go:398 +0x145 github.com/fsnotify/fsnotify.read(0x3, {0xc00006be70, 0xa, 0xa}, 0x5b04e30) /Users/timothy3/go/pkg/mod/github.com/fsnotify/fsnotify@v1.5.4/kqueue.go:525 +0xa5 github.com/fsnotify/fsnotify.(*Watcher).readEvents(0xc0001b2540) /Users/timothy3/go/pkg/mod/github.com/fsnotify/fsnotify@v1.5.4/kqueue.go:288 +0x10d created by github.com/fsnotify/fsnotify.NewWatcher /Users/timothy3/go/pkg/mod/github.com/fsnotify/fsnotify@v1.5.4/kqueue.go:63 +0x348

goroutine 36 [chan receive, 3 minutes]: fyne.io/fyne/v2/app.watchFile.func1() /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/app/settings_desktop.go:43 +0x85 created by fyne.io/fyne/v2/app.watchFile /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/app/settings_desktop.go:42 +0x1ac

goroutine 38 [select, 3 minutes]: fyne.io/fyne/v2/internal/async.(*UnboundedFuncChan).processing(0xc00048f080) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/async/chan_func.go:45 +0x151 created by fyne.io/fyne/v2/internal/async.NewUnboundedFuncChan /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/async/chan_func.go:22 +0x173

goroutine 39 [chan receive, 3 minutes]: pipeline/gui.(BuildDetailsPanel).ShowTestCaseDetails(0xc0004ca3c0) /Users/timothy3/git/pipeline/gui/panel3.go:399 +0x5e8 pipeline/gui.(BuildDetailsPanel).testCaseDetailsPress(0xc0004ca3c0) /Users/timothy3/git/pipeline/gui/panel3.go:311 +0x1e fyne.io/fyne/v2/widget.(Button).Tapped(0xc000488dc0, 0x400bb18) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/widget/button.go:202 +0x77 fyne.io/fyne/v2/internal/driver/glfw.(window).mouseClickedHandleTapDoubleTap.func1() /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/window.go:634 +0x42 fyne.io/fyne/v2/internal/driver/common.(Window).RunEventQueue(0xc0004323c0) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/common/window.go:35 +0x73 created by fyne.io/fyne/v2/internal/driver/glfw.(gLDriver).createWindow.func1 /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/window.go:946 +0x1a6

goroutine 30 [chan receive]: fyne.io/fyne/v2/internal/animation.(Runner).runAnimations.func1() /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/animation/runner.go:69 +0x67 created by fyne.io/fyne/v2/internal/animation.(Runner).runAnimations /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/animation/runner.go:67 +0xa5

goroutine 25 [chan receive, 3 minutes]: fyne.io/fyne/v2/internal/driver/glfw.catchTerm(0xc0004cec40) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/driver.go:188 +0xe6 created by fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).Run /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/driver.go:168 +0x91

goroutine 50 [syscall, 3 minutes]: os/signal.signal_recv() /usr/local/go/src/runtime/sigqueue.go:148 +0x28 os/signal.loop() /usr/local/go/src/os/signal/signal_unix.go:23 +0x1d created by os/signal.Notify.func1.1 /usr/local/go/src/os/signal/signal.go:151 +0x2e

goroutine 13 [chan receive]: fyne.io/fyne/v2/internal/driver/glfw.runOnDraw(0xc0020d03c0, 0xc00055e250) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/loop.go:85 +0x21f fyne.io/fyne/v2/internal/driver/glfw.(window).Close(0xc0020d03c0) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/window.go:211 +0xcd pipeline/gui.(BuildDetailsPanel).ShowTestCaseDetails.func1() /Users/timothy3/git/pipeline/gui/panel3.go:387 +0x2e fyne.io/fyne/v2/widget.(Button).Tapped(0xc000e32280, 0x400bb18) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/widget/button.go:202 +0x77 fyne.io/fyne/v2/internal/driver/glfw.(window).mouseClickedHandleTapDoubleTap.func1() /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/window.go:634 +0x42 fyne.io/fyne/v2/internal/driver/common.(Window).RunEventQueue(0xc0020d03c0) /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/common/window.go:35 +0x73 created by fyne.io/fyne/v2/internal/driver/glfw.(gLDriver).createWindow.func1 /Users/timothy3/go/pkg/mod/fyne.io/fyne/v2@v2.3.3/internal/driver/glfw/window.go:946 +0x1a6

goroutine 15 [IO wait, 3 minutes]: internal/poll.runtime_pollWait(0x5468cc0?, 0x72) /usr/local/go/src/runtime/netpoll.go:302 +0x45 internal/poll.(pollDesc).wait(0xc001b05b18, 0x72, 0x0) /usr/local/go/src/internal/poll/fd_poll_runtime.go:83 +0x88 internal/poll.(pollDesc).waitRead(0xc001b05b18, 0x0) /usr/local/go/src/internal/poll/fd_poll_runtime.go:88 +0x37 internal/poll.(FD).Read(0xc001b05b00, {0xc00164a000, 0x8949, 0x8949}) /usr/local/go/src/internal/poll/fd_unix.go:167 +0x44f net.(netFD).Read(0xc001b05b00, {0xc00164a000, 0x8949, 0x8949}) /usr/local/go/src/net/fd_posix.go:55 +0x73 net.(conn).Read(0xc0006941f0, {0xc00164a000, 0x8949, 0x8949}) /usr/local/go/src/net/net.go:183 +0xa9 crypto/tls.(atLeastReader).Read(0xc000c93470, {0xc00164a000, 0x8949, 0x8949}) /usr/local/go/src/crypto/tls/conn.go:785 +0xc2 bytes.(Buffer).ReadFrom(0xc000a25e78, {0x5466d80, 0xc000c93470}) /usr/local/go/src/bytes/buffer.go:204 +0x142 crypto/tls.(Conn).readFromUntil(0xc000a25c00, {0x2e513398, 0xc0006941f0}, 0x5) /usr/local/go/src/crypto/tls/conn.go:807 +0x172 crypto/tls.(Conn).readRecordOrCCS(0xc000a25c00, 0x0) /usr/local/go/src/crypto/tls/conn.go:614 +0x1d8 crypto/tls.(Conn).readRecord(0xc000a25c00) /usr/local/go/src/crypto/tls/conn.go:582 +0x2b crypto/tls.(Conn).Read(0xc000a25c00, {0xc0020c9000, 0x1000, 0x1000}) /usr/local/go/src/crypto/tls/conn.go:1285 +0x217 net/http.(persistConn).Read(0xc000c90ea0, {0xc0020c9000, 0x1000, 0x1000}) /usr/local/go/src/net/http/transport.go:1929 +0x1dc bufio.(Reader).fill(0xc0017fde00) /usr/local/go/src/bufio/bufio.go:106 +0x294 bufio.(Reader).Peek(0xc0017fde00, 0x1) /usr/local/go/src/bufio/bufio.go:144 +0x178 net/http.(persistConn).readLoop(0xc000c90ea0) /usr/local/go/src/net/http/transport.go:2093 +0x269 created by net/http.(Transport).dialConn /usr/local/go/src/net/http/transport.go:1750 +0x277e

goroutine 16 [select, 3 minutes]: net/http.(persistConn).writeLoop(0xc000c90ea0) /usr/local/go/src/net/http/transport.go:2392 +0x16e created by net/http.(Transport).dialConn /usr/local/go/src/net/http/transport.go:1751 +0x27e7

Example code

func (b *BuildDetailsPanel) ShowTestCaseDetails() {

    tcDetailsWin := mainApp.NewWindow(fmt.Sprintf("TestCase Details - %s", b.selectedTest.ClassName))

    modalChan := make(chan bool)

    // bottom row stuff
    okButton := widget.NewButton("Ok", func() { tcDetailsWin.Close() })
    searchButton := widget.NewButton("Search", func() {})
    buttonRow := container.NewGridWithColumns(3, okButton, layout.NewSpacer(), searchButton)
    buttonCentered := container.NewCenter(buttonRow)

    panels := container.NewHSplit(b.GetTCDetailPanel(), b.GetJiraNavigatorContent())
    tcDetailsWin.SetContent(container.NewBorder(nil, buttonCentered, nil, nil, panels))
    tcDetailsWin.SetOnClosed(func() { close(modalChan) })
    tcDetailsWin.Show()
    tcDetailsWin.Resize(fyne.NewSize(768, 1024))
    running := true
    for running {
        _, running = <-modalChan
    }

}

func (b *BuildDetailsPanel) GetTCDetailPanel() fyne.CanvasObject {

    var suiteLabel *widget.Label
    var suiteTimeLabel *widget.Label
    var classLabel *widget.Label
    var testLabel *widget.Label
    var resultLabel *widget.Label
    var failedSince *widget.Label
    var tcDuration *widget.Label
    var stdErr *widget.RichText
    var stdOut *widget.RichText
    var tcError *widget.RichText
    var tcTrace *widget.RichText

    tc := b.selectedTest
    suiteLabel = widget.NewLabel(fmt.Sprintf("Suite: %s", "?"))
    suiteTimeLabel = widget.NewLabel(fmt.Sprintf("Suite timestamp: %s", "?"))
    classLabel = widget.NewLabel(fmt.Sprintf("Class: %s", tc.ClassName))
    testLabel = widget.NewLabel(fmt.Sprintf("Test: %s", tc.Name))
    resultLabel = widget.NewLabel(fmt.Sprintf("Result: %s", tc.Status))
    failedSince = widget.NewLabel(fmt.Sprintf("FailedSince: %d", tc.FailedSince))
    tcDuration = widget.NewLabel(fmt.Sprintf("TestCase Duration: %s", time.Duration(tc.DurationSeconds)*time.Second))
    stdErr = widget.NewRichTextWithText(data.InterfaceToString(tc.Stderr))
    stdErr.Wrapping = defaultErrorDetailWrapping
    stdOut = widget.NewRichTextWithText(data.InterfaceToString(tc.Stdout))
    stdOut.Wrapping = defaultErrorDetailWrapping
    tcError = widget.NewRichTextWithText(data.InterfaceToString(tc.ErrorDetails))
    tcError.Wrapping = defaultErrorDetailWrapping
    tcTrace = widget.NewRichTextWithText(data.InterfaceToString(tc.ErrorStackTrace))
    tcTrace.Wrapping = defaultErrorDetailWrapping

    labels := container.NewVBox(suiteLabel, suiteTimeLabel, classLabel, testLabel, resultLabel, failedSince, tcDuration)

    errScroll := container.NewScroll(stdErr)
    errTab := container.NewTabItem("StdErr", errScroll)
    outScroll := container.NewScroll(stdOut)
    outTab := container.NewTabItem("StdOut", outScroll)
    detailsTab := container.NewTabItem("Err Details", tcError)
    straceScroll := container.NewScroll(tcTrace)
    traceTab := container.NewTabItem("Trace", straceScroll)
    tcTabs := container.NewAppTabs(errTab, outTab, detailsTab, traceTab)

    return container.NewBorder(labels, nil, nil, nil, tcTabs)

}

func (b *BuildDetailsPanel) GetJiraNavigatorContent() (jiraContainer fyne.CanvasObject) {

    var jiraCards []*jira.ResponseItemsBasicFields
    var jiraErr error

    jiraErrBox := widget.NewRichTextWithText("Loading...")
    jiraErrBox.Wrapping = defaultErrorDetailWrapping
    jiraScroller := container.NewScroll(jiraErrBox)
    jiraScroller.SetMinSize(fyne.NewSize(480, 300))

    summaryLabel := widget.NewLabel("Summary")
    summaryBox := widget.NewRichTextWithText("")
    summaryBoxScroller := container.NewScroll(summaryBox)
    summaryBoxScroller.SetMinSize(fyne.NewSize(480, 300))

    desLabel := widget.NewLabel("Description")
    descBox := widget.NewRichTextWithText("")
    descBoxScroller := container.NewScroll(descBox)
    descBoxScroller.SetMinSize(fyne.NewSize(480, 300))

    cardStack := container.NewVBox(summaryLabel, summaryBoxScroller, desLabel, descBoxScroller)
    viewCard := widget.NewCard("", "", cardStack)

    newButton := widget.NewButton("New Jira", func() {})
    commentButton := widget.NewButton("Add Comment", func() {})
    buttons := container.NewGridWithRows(1, newButton, layout.NewSpacer(), commentButton)
    buttonCenter := container.NewCenter(buttons)

    if jiraClient == nil {
        jiraClient = jira.NewClient(settings.JiraUrl)
    }

    jiraList := widget.NewList(
        func() int { return len(jiraCards) },
        func() fyne.CanvasObject { return widget.NewLabel("") },
        func(id widget.ListItemID, object fyne.CanvasObject) {
            object.(*widget.Label).SetText(fmt.Sprintf("%s: %s", jiraCards[id].Key, jiraCards[id].Fields.Summary))
        })
    jiraList.OnSelected = func(id widget.ListItemID) {
        b.selectedJira = jiraCards[id]
        viewCard.SetTitle(jiraCards[id].Id)
        viewCard.SetSubTitle(jiraCards[id].Fields.Summary)
        summaryBox.ParseMarkdown(jiraCards[id].Fields.Summary)
        descBox.ParseMarkdown(jiraCards[id].Fields.Description)
    }
    jiraScroller.Content = jiraList

    jiraContainer = container.NewBorder(jiraScroller, buttonCenter, nil, nil, viewCard)

    jiraCards, jiraErr = jiraClient.QueryJql("")
    if jiraErr != nil {
        jiraErrBox.ParseMarkdown(fmt.Sprintf("failed to load jira cards - %+v", jiraErr))
        return
    }
    jiraList.Refresh()
    return
}

Fyne version

v2.3.3

Go compiler version

1.18.6

Operating system and version

MacOS 13.3 Ventura

Additional Information

Screenshot 2023-05-08 at 12 51 41 PM

Screenshot 2023-05-08 at 12 52 44 PM

andydotxyz commented 1 year ago

Does this always happen around window closure? From the stack it seems that the underlying viewport context is going away (and set to nil) before we have finished drawing the current frame in the window.

tim-timpani commented 1 year ago

Yes, always when closing a window. It happened again, this time while running debug in PyLand. I can attach some screen shots.

michaeljsaenz commented 1 year ago

Instead of creating a new issue I found this one which may be related to a similar fatal error I am receiving when closing a NewWindow...

Go version: 1.20, Fyne: v2.3.4

Below is the button yb.OnTapped which creates the NewWindow, this is the same window (not the master window) that when closed receives the fatal error: unexpected signal during runtime execution:

        yb.OnTapped = func() {
            // export yaml and display in new window
            win := app.NewWindow("Application (Pod): " + selectedPod)
            podYaml, err := k8s.GetPodYaml(clientset, newPodNamespace, selectedPod)
            if err != nil {
                fmt.Printf("error with GetPodYaml: %v\n", err)
            }
            podYamlScroll := container.NewScroll(widget.NewLabel(podYaml))

            bottomBox := container.NewVBox(
                widget.NewButtonWithIcon("Copy YAML", theme.ContentCopyIcon(), func() {
                    win.Clipboard().SetContent(podYaml)
                }),
            )
            content := container.NewBorder(nil, bottomBox, nil, nil, podYamlScroll)

            win.SetContent(content)
            win.Resize(fyne.NewSize(1200, 700))
            win.Show()

below is the func k8s.GetPodYaml that is called and contents loaded into NewWindow:

func GetPodYaml(c kubernetes.Clientset, podNamespace string, podName string) (string, error) {
    pod, err := c.CoreV1().Pods(podNamespace).Get(context.TODO(), podName, v1.GetOptions{})
    if err != nil {
        return "", fmt.Errorf("error getting pod: %v", err)
    }

    // clear unnecessary fields
    pod.ObjectMeta.ManagedFields = nil
    pod.ObjectMeta.GenerateName = ""
    pod.Status = corev1.PodStatus{}

    // serialize the Pod to YAML format
    codec := serializer.NewCodecFactory(scheme.Scheme).LegacyCodec(corev1.SchemeGroupVersion)
    marshaledYaml, err := runtime.Encode(codec, pod)
    if err != nil {
        return "", fmt.Errorf("error encoding YAML: %v", err)
    }

    // convert the marshaled YAML to a string
    yamlString, err := yaml.JSONToYAML(marshaledYaml)
    if err != nil {
        return "", fmt.Errorf("error converting YAML to string: %v", err)
    }

    return string(yamlString), nil

}

Below is the full error, it varies when it happens (usually within three attempts of opening/closing the NewWindow):

fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x0]

runtime stack:
runtime.throw({0x101600ae0?, 0xc00156dcb8?})
        /usr/local/go/src/runtime/panic.go:1047 +0x5d fp=0x70000b788e90 sp=0x70000b788e60 pc=0x1000370dd
runtime.sigpanic()
        /usr/local/go/src/runtime/signal_unix.go:821 +0x3e9 fp=0x70000b788ef0 sp=0x70000b788e90 pc=0x10004d389
runtime.asmcgocall(0x10004078d, 0xc0005009c0)
        /usr/local/go/src/runtime/asm_amd64.s:852 +0x64 fp=0x70000b788ef8 sp=0x70000b788ef0 pc=0x100069aa4

goroutine 66 [syscall, locked to thread]:
runtime.cgocall(0x101264a00, 0xc00156deb0)
        /usr/local/go/src/runtime/cgocall.go:157 +0x5c fp=0xc00156de88 sp=0xc00156de50 pc=0x1000069dc
github.com/go-gl/glfw/v3.3/glfw._Cfunc_glfwMakeContextCurrent(0x0)
        _cgo_gotypes.go:1471 +0x45 fp=0xc00156deb0 sp=0xc00156de88 pc=0x1005e3365
github.com/go-gl/glfw/v3.3/glfw.DetachCurrentContext()
        /Users/m/go/pkg/mod/github.com/go-gl/glfw/v3.3/glfw@v0.0.0-20221017161538-93cebf72946b/context.go:23 +0x25 fp=0xc00156ded8 sp=0xc00156deb0 pc=0x1005e6565
fyne.io/fyne/v2/internal/driver/glfw.(*window).DetachCurrentContext(...)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window_desktop.go:637
fyne.io/fyne/v2/internal/driver/glfw.(*window).RunWithContext(0xc00156df90?, 0xc00119a090)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:909 +0x55 fp=0xc00156def8 sp=0xc00156ded8 pc=0x10060bf75
fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).startDrawThread.func1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/loop.go:238 +0x13b fp=0xc00156dfe0 sp=0xc00156def8 pc=0x100603f7b
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00156dfe8 sp=0xc00156dfe0 pc=0x100069dc1
created by fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).startDrawThread
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/loop.go:230 +0xea

goroutine 1 [syscall, locked to thread]:
runtime.cgocall(0x101265c20, 0xc001233690)
        /usr/local/go/src/runtime/cgocall.go:157 +0x5c fp=0xc001233668 sp=0xc001233630 pc=0x1000069dc
github.com/go-gl/glfw/v3.3/glfw._Cfunc_glfwFocusWindow(0x102e21bc0)
        _cgo_gotypes.go:778 +0x45 fp=0xc001233690 sp=0xc001233668 pc=0x1005e1b85
github.com/go-gl/glfw/v3.3/glfw.(*Window).Focus.func1(0x3?)
        /Users/m/go/pkg/mod/github.com/go-gl/glfw/v3.3/glfw@v0.0.0-20221017161538-93cebf72946b/window.go:607 +0x46 fp=0xc0012336c8 sp=0xc001233690 pc=0x1005ed706
github.com/go-gl/glfw/v3.3/glfw.(*Window).Focus(0x3?)
        /Users/m/go/pkg/mod/github.com/go-gl/glfw/v3.3/glfw@v0.0.0-20221017161538-93cebf72946b/window.go:607 +0x19 fp=0xc0012336e0 sp=0xc0012336c8 pc=0x1005ed699
github.com/go-gl/glfw/v3.3/glfw.(*Window).Focus-fm()
        <autogenerated>:1 +0x26 fp=0xc0012336f8 sp=0xc0012336e0 pc=0x100614826
fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).runGL(0xc0001665b0)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/loop.go:133 +0x1cc fp=0xc001233828 sp=0xc0012336f8 pc=0x1006036ec
fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).Run(0xc0001665b0)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/driver.go:169 +0x75 fp=0xc001233848 sp=0xc001233828 pc=0x100601e95
fyne.io/fyne/v2/internal/driver/glfw.(*window).ShowAndRun(0xc0002261e0)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:230 +0x2c fp=0xc001233860 sp=0xc001233848 pc=0x100606e8c
main.main()
        /Users/m/main.go:146 +0x10bc fp=0xc001233f80 sp=0xc001233860 pc=0x10125021c
runtime.main()
        /usr/local/go/src/runtime/proc.go:250 +0x207 fp=0xc001233fe0 sp=0xc001233f80 pc=0x100039967
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc001233fe8 sp=0xc001233fe0 pc=0x100069dc1

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007cfb0 sp=0xc00007cf90 pc=0x100039d96
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.forcegchelper()
        /usr/local/go/src/runtime/proc.go:305 +0xb0 fp=0xc00007cfe0 sp=0xc00007cfb0 pc=0x100039bd0
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007cfe8 sp=0xc00007cfe0 pc=0x100069dc1
created by runtime.init.6
        /usr/local/go/src/runtime/proc.go:293 +0x25

goroutine 3 [GC sweep wait]:
runtime.gopark(0x1?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007d780 sp=0xc00007d760 pc=0x100039d96
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.bgsweep(0x0?)
        /usr/local/go/src/runtime/mgcsweep.go:319 +0xde fp=0xc00007d7c8 sp=0xc00007d780 pc=0x1000266fe
runtime.gcenable.func1()
        /usr/local/go/src/runtime/mgc.go:178 +0x26 fp=0xc00007d7e0 sp=0xc00007d7c8 pc=0x10001b926
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007d7e8 sp=0xc00007d7e0 pc=0x100069dc1
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:178 +0x6b

goroutine 4 [GC scavenge wait]:
runtime.gopark(0xc0000520e0?, 0x101853aa8?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007df70 sp=0xc00007df50 pc=0x100039d96
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.(*scavengerState).park(0x10277f860)
        /usr/local/go/src/runtime/mgcscavenge.go:400 +0x53 fp=0xc00007dfa0 sp=0xc00007df70 pc=0x100024593
runtime.bgscavenge(0x0?)
        /usr/local/go/src/runtime/mgcscavenge.go:633 +0x65 fp=0xc00007dfc8 sp=0xc00007dfa0 pc=0x100024b85
runtime.gcenable.func2()
        /usr/local/go/src/runtime/mgc.go:179 +0x26 fp=0xc00007dfe0 sp=0xc00007dfc8 pc=0x10001b8c6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007dfe8 sp=0xc00007dfe0 pc=0x100069dc1
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:179 +0xaa

goroutine 18 [finalizer wait]:
runtime.gopark(0x1a0?, 0x102780760?, 0xe0?, 0x24?, 0xc00007c770?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007c628 sp=0xc00007c608 pc=0x100039d96
runtime.runfinq()
        /usr/local/go/src/runtime/mfinal.go:193 +0x107 fp=0xc00007c7e0 sp=0xc00007c628 pc=0x10001a967
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007c7e8 sp=0xc00007c7e0 pc=0x100069dc1
created by runtime.createfing
        /usr/local/go/src/runtime/mfinal.go:163 +0x45

goroutine 19 [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000078750 sp=0xc000078730 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000787e0 sp=0xc000078750 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000787e8 sp=0xc0000787e0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 20 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bf7540?, 0x3?, 0x7d?, 0x7e?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000078f50 sp=0xc000078f30 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc000078fe0 sp=0xc000078f50 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000078fe8 sp=0xc000078fe0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 34 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bf734b?, 0x3?, 0x8e?, 0x7?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000506750 sp=0xc000506730 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0005067e0 sp=0xc000506750 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0005067e8 sp=0xc0005067e0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 21 [GC worker (idle)]:
runtime.gopark(0x1027b1400?, 0x3?, 0x49?, 0xa0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000079750 sp=0xc000079730 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000797e0 sp=0xc000079750 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000797e8 sp=0xc0000797e0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 5 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bdda55?, 0x3?, 0x8d?, 0xb5?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007e750 sp=0xc00007e730 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc00007e7e0 sp=0xc00007e750 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007e7e8 sp=0xc00007e7e0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 35 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bf72a9?, 0x3?, 0x68?, 0x34?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000506f50 sp=0xc000506f30 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc000506fe0 sp=0xc000506f50 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000506fe8 sp=0xc000506fe0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 36 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bddb81?, 0x3?, 0xea?, 0x4b?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000507750 sp=0xc000507730 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0005077e0 sp=0xc000507750 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0005077e8 sp=0xc0005077e0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 6 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bdda09?, 0x1?, 0x5e?, 0xaa?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007ef50 sp=0xc00007ef30 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc00007efe0 sp=0xc00007ef50 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007efe8 sp=0xc00007efe0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 37 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bdcb19?, 0x1?, 0x6e?, 0xfc?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000507f50 sp=0xc000507f30 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc000507fe0 sp=0xc000507f50 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000507fe8 sp=0xc000507fe0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 7 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bddbb9?, 0x1?, 0x4c?, 0x45?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007f750 sp=0xc00007f730 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc00007f7e0 sp=0xc00007f750 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007f7e8 sp=0xc00007f7e0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 22 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bc4f73?, 0x1?, 0x3c?, 0xbf?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000079f50 sp=0xc000079f30 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc000079fe0 sp=0xc000079f50 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000079fe8 sp=0xc000079fe0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 38 [GC worker (idle)]:
runtime.gopark(0x1b8a5b4bdd173?, 0x3?, 0x32?, 0x88?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000508750 sp=0xc000508730 pc=0x100039d96
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0005087e0 sp=0xc000508750 pc=0x10001d691
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0005087e8 sp=0xc0005087e0 pc=0x100069dc1
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 9 [syscall]:
syscall.syscall6(0x100018601?, 0x10023b7cd?, 0x10023a9c5?, 0xc000132000?, 0x101872a10?, 0xc000128018?, 0xc000508cf0?)
        /usr/local/go/src/runtime/sys_darwin.go:45 +0x99 fp=0xc000508c08 sp=0xc000508b48 pc=0x100066619
golang.org/x/sys/unix.kevent(0x0?, 0x0?, 0xc000508cb8?, 0x10010cd1b?, 0xc000132000?, 0xc0005ce000?)
        /Users/m/go/pkg/mod/golang.org/x/sys@v0.7.0/unix/zsyscall_darwin_amd64.go:276 +0x52 fp=0xc000508c70 sp=0xc000508c08 pc=0x100614d92
golang.org/x/sys/unix.Kevent(0x100069a76?, {0x0?, 0x10007743a?, 0xc0005cc000?}, {0xc000508e70?, 0x9?, 0xc000508d00?}, 0x1000565b4?)
        /Users/m/go/pkg/mod/golang.org/x/sys@v0.7.0/unix/syscall_bsd.go:398 +0x3c fp=0xc000508cb0 sp=0xc000508c70 pc=0x100614c1c
github.com/fsnotify/fsnotify.(*Watcher).read(0x10079e2ae?, {0xc000508e70?, 0xc0005cc000?, 0xa})
        /Users/m/go/pkg/mod/github.com/fsnotify/fsnotify@v1.6.0/backend_kqueue.go:702 +0x45 fp=0xc000508d08 sp=0xc000508cb0 pc=0x1006184e5
github.com/fsnotify/fsnotify.(*Watcher).readEvents(0xc000166620)
        /Users/m/go/pkg/mod/github.com/fsnotify/fsnotify@v1.6.0/backend_kqueue.go:487 +0xcd fp=0xc000508fc8 sp=0xc000508d08 pc=0x1006171ed
github.com/fsnotify/fsnotify.NewWatcher.func1()
        /Users/m/go/pkg/mod/github.com/fsnotify/fsnotify@v1.6.0/backend_kqueue.go:155 +0x26 fp=0xc000508fe0 sp=0xc000508fc8 pc=0x1006159c6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000508fe8 sp=0xc000508fe0 pc=0x100069dc1
created by github.com/fsnotify/fsnotify.NewWatcher
        /Users/m/go/pkg/mod/github.com/fsnotify/fsnotify@v1.6.0/backend_kqueue.go:155 +0x225

goroutine 52 [IO wait]:
runtime.gopark(0x6?, 0xc00083c000?, 0x0?, 0x25?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00053f608 sp=0xc00053f5e8 pc=0x100039d96
runtime.netpollblock(0x10008cba9?, 0x64ef?, 0x1?)
        /usr/local/go/src/runtime/netpoll.go:527 +0xf7 fp=0xc00053f640 sp=0xc00053f608 pc=0x100032f37
internal/poll.runtime_pollWait(0x12c274058, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0x89 fp=0xc00053f660 sp=0xc00053f640 pc=0x100063d89
internal/poll.(*pollDesc).wait(0xc00016c080?, 0xc00083c000?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32 fp=0xc00053f688 sp=0xc00053f660 pc=0x1000e1892
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00016c080, {0xc00083c000, 0x2500, 0x2500})
        /usr/local/go/src/internal/poll/fd_unix.go:167 +0x299 fp=0xc00053f720 sp=0xc00053f688 pc=0x1000e2c79
net.(*netFD).Read(0xc00016c080, {0xc00083c000?, 0xc00083c005?, 0x1a?})
        /usr/local/go/src/net/fd_posix.go:55 +0x29 fp=0xc00053f768 sp=0xc00053f720 pc=0x1001e20c9
net.(*conn).Read(0xc00059a000, {0xc00083c000?, 0x0?, 0xc0001321b0?})
        /usr/local/go/src/net/net.go:183 +0x45 fp=0xc00053f7b0 sp=0xc00053f768 pc=0x1001efc65
net.(*TCPConn).Read(0xc00053f848?, {0xc00083c000?, 0xc000675cf8?, 0x18?})
        <autogenerated>:1 +0x29 fp=0xc00053f7e0 sp=0xc00053f7b0 pc=0x100200429
crypto/tls.(*atLeastReader).Read(0xc000675cf8, {0xc00083c000?, 0xc000675cf8?, 0x0?})
        /usr/local/go/src/crypto/tls/conn.go:788 +0x3d fp=0xc00053f828 sp=0xc00053f7e0 pc=0x1002374fd
bytes.(*Buffer).ReadFrom(0xc000132290, {0x10185a8e0, 0xc000675cf8})
        /usr/local/go/src/bytes/buffer.go:202 +0x98 fp=0xc00053f880 sp=0xc00053f828 pc=0x100108438
crypto/tls.(*Conn).readFromUntil(0xc000132000, {0x104558fc8?, 0xc00059a000}, 0x2500?)
        /usr/local/go/src/crypto/tls/conn.go:810 +0xe5 fp=0xc00053f8c0 sp=0xc00053f880 pc=0x1002376e5
crypto/tls.(*Conn).readRecordOrCCS(0xc000132000, 0x0)
        /usr/local/go/src/crypto/tls/conn.go:617 +0x116 fp=0xc00053fc20 sp=0xc00053f8c0 pc=0x100234bd6
crypto/tls.(*Conn).readRecord(...)
        /usr/local/go/src/crypto/tls/conn.go:583
crypto/tls.(*Conn).Read(0xc000132000, {0xc0005ce000, 0x1000, 0x0?})
        /usr/local/go/src/crypto/tls/conn.go:1316 +0x16f fp=0xc00053fc90 sp=0xc00053fc20 pc=0x10023aacf
bufio.(*Reader).Read(0xc0005cc000, {0xc0005bc200, 0x9, 0xc000194088?})
        /usr/local/go/src/bufio/bufio.go:237 +0x1bb fp=0xc00053fcc8 sp=0xc00053fc90 pc=0x10010cd1b
io.ReadAtLeast({0x10185a700, 0xc0005cc000}, {0xc0005bc200, 0x9, 0x9}, 0x9)
        /usr/local/go/src/io/io.go:332 +0x9a fp=0xc00053fd10 sp=0xc00053fcc8 pc=0x10007743a
io.ReadFull(...)
        /usr/local/go/src/io/io.go:351
golang.org/x/net/http2.readFrameHeader({0xc0005bc200?, 0x9?, 0xc00153fda8?}, {0x10185a700?, 0xc0005cc000?})
        /Users/m/go/pkg/mod/golang.org/x/net@v0.9.0/http2/frame.go:237 +0x6e fp=0xc00053fd60 sp=0xc00053fd10 pc=0x10079e2ae
golang.org/x/net/http2.(*Framer).ReadFrame(0xc0005bc1c0)
        /Users/m/go/pkg/mod/golang.org/x/net@v0.9.0/http2/frame.go:498 +0x95 fp=0xc00053fe10 sp=0xc00053fd60 pc=0x10079eaf5
golang.org/x/net/http2.(*clientConnReadLoop).run(0xc00053ff98)
        /Users/m/go/pkg/mod/golang.org/x/net@v0.9.0/http2/transport.go:2225 +0x12e fp=0xc00053ff60 sp=0xc00053fe10 pc=0x1007b17ae
golang.org/x/net/http2.(*ClientConn).readLoop(0xc000196180)
        /Users/m/go/pkg/mod/golang.org/x/net@v0.9.0/http2/transport.go:2120 +0x6f fp=0xc00053ffc8 sp=0xc00053ff60 pc=0x1007b0ccf
golang.org/x/net/http2.(*Transport).newClientConn.func1()
        /Users/m/go/pkg/mod/golang.org/x/net@v0.9.0/http2/transport.go:818 +0x26 fp=0xc00053ffe0 sp=0xc00053ffc8 pc=0x1007a9966
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00053ffe8 sp=0xc00053ffe0 pc=0x100069dc1
created by golang.org/x/net/http2.(*Transport).newClientConn
        /Users/m/go/pkg/mod/golang.org/x/net@v0.9.0/http2/transport.go:818 +0xc1f

goroutine 10 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0005096b0 sp=0xc000509690 pc=0x100039d96
runtime.chanrecv(0xc0000585a0, 0xc0005097b8, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000509740 sp=0xc0005096b0 pc=0x10000977d
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000509768 sp=0xc000509740 pc=0x1000092b8
fyne.io/fyne/v2/app.watchFile.func1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/app/settings_desktop.go:43 +0x6c fp=0xc0005097e0 sp=0xc000509768 pc=0x10061bf6c
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0005097e8 sp=0xc0005097e0 pc=0x100069dc1
created by fyne.io/fyne/v2/app.watchFile
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/app/settings_desktop.go:42 +0x111

goroutine 67 [select]:
runtime.gopark(0xc000502f68?, 0x2?, 0x60?, 0x2f?, 0xc000502f00?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000502d78 sp=0xc000502d58 pc=0x100039d96
runtime.selectgo(0xc000502f68, 0xc000502efc, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc000502eb8 sp=0xc000502d78 pc=0x10004955e
fyne.io/fyne/v2/internal/async.(*UnboundedFuncChan).processing(0xc000760060)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/async/chan_func.go:45 +0xf1 fp=0xc000502fc8 sp=0xc000502eb8 pc=0x10039b731
fyne.io/fyne/v2/internal/async.NewUnboundedFuncChan.func1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/async/chan_func.go:22 +0x26 fp=0xc000502fe0 sp=0xc000502fc8 pc=0x10039b566
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000502fe8 sp=0xc000502fe0 pc=0x100069dc1
created by fyne.io/fyne/v2/internal/async.NewUnboundedFuncChan
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/async/chan_func.go:22 +0xf8

goroutine 68 [chan receive]:
runtime.gopark(0xc001569f08?, 0x1003144b0?, 0x0?, 0x80?, 0x101878580?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc001569ee0 sp=0xc001569ec0 pc=0x100039d96
runtime.chanrecv(0xc000130240, 0xc001569fb0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc001569f70 sp=0xc001569ee0 pc=0x10000977d
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc001569f98 sp=0xc001569f70 pc=0x1000092b8
fyne.io/fyne/v2/internal/driver/common.(*Window).RunEventQueue(0x0?)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/common/window.go:34 +0x4d fp=0xc001569fc8 sp=0xc001569f98 pc=0x1004be4ed
fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).createWindow.func1.1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:946 +0x26 fp=0xc001569fe0 sp=0xc001569fc8 pc=0x10060c546
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc001569fe8 sp=0xc001569fe0 pc=0x100069dc1
created by fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).createWindow.func1
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:946 +0x136

goroutine 69 [select]:
runtime.gopark(0xc000503f68?, 0x2?, 0x60?, 0x3f?, 0xc000503f00?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000503d78 sp=0xc000503d58 pc=0x100039d96
runtime.selectgo(0xc000503f68, 0xc000503efc, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc000503eb8 sp=0xc000503d78 pc=0x10004955e
fyne.io/fyne/v2/internal/async.(*UnboundedFuncChan).processing(0xc0007600c0)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/async/chan_func.go:45 +0xf1 fp=0xc000503fc8 sp=0xc000503eb8 pc=0x10039b731
fyne.io/fyne/v2/internal/async.NewUnboundedFuncChan.func1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/async/chan_func.go:22 +0x26 fp=0xc000503fe0 sp=0xc000503fc8 pc=0x10039b566
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000503fe8 sp=0xc000503fe0 pc=0x100069dc1
created by fyne.io/fyne/v2/internal/async.NewUnboundedFuncChan
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/async/chan_func.go:22 +0xf8

goroutine 70 [chan receive]:
runtime.gopark(0x1018603f0?, 0xc000f61aa0?, 0xc7?, 0x57?, 0x101878e20?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0016edef8 sp=0xc0016eded8 pc=0x100039d96
runtime.chanrecv(0xc000130de0, 0xc001515fc8, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc0016edf88 sp=0xc0016edef8 pc=0x10000977d
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc0016edfb0 sp=0xc0016edf88 pc=0x1000092b8
fyne.io/fyne/v2/data/binding.queueItem.func1.1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/data/binding/queue.go:18 +0x51 fp=0xc0016edfe0 sp=0xc0016edfb0 pc=0x1004c0d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0016edfe8 sp=0xc0016edfe0 pc=0x100069dc1
created by fyne.io/fyne/v2/data/binding.queueItem.func1
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/data/binding/queue.go:17 +0x45

goroutine 23 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x80?, 0x8d?, 0xc0012c8db0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc001229ec0 sp=0xc001229ea0 pc=0x100039d96
runtime.chanrecv(0xc000130ea0, 0xc001229fb8, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc001229f50 sp=0xc001229ec0 pc=0x10000977d
runtime.chanrecv2(0xc0000520e0?, 0x66?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc001229f78 sp=0xc001229f50 pc=0x1000092b8
main.main.func7()
        /Users/m/main.go:134 +0x65 fp=0xc001229fe0 sp=0xc001229f78 pc=0x1012502a5
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc001229fe8 sp=0xc001229fe0 pc=0x100069dc1
created by main.main
        /Users/m/main.go:133 +0xffb

goroutine 25 [chan receive]:
runtime.gopark(0xc000509e78?, 0xc000509ed0?, 0xb3?, 0x1?, 0xc000509ed0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000509ea0 sp=0xc000509e80 pc=0x100039d96
runtime.chanrecv(0xc0006281e0, 0xc000509f88, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000509f30 sp=0xc000509ea0 pc=0x10000977d
runtime.chanrecv2(0xc0006281e0?, 0xc000509f98?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000509f58 sp=0xc000509f30 pc=0x1000092b8
fyne.io/fyne/v2/internal/driver/glfw.catchTerm(0x0?)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/driver.go:188 +0x8f fp=0xc000509fc8 sp=0xc000509f58 pc=0x1006020ef
fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).Run.func1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/driver.go:168 +0x26 fp=0xc000509fe0 sp=0xc000509fc8 pc=0x100601f06
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000509fe8 sp=0xc000509fe0 pc=0x100069dc1
created by fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).Run
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/driver.go:168 +0x6b

goroutine 40 [select, locked to thread]:
runtime.gopark(0xc00056b7a8?, 0x2?, 0x12?, 0xa1?, 0xc00056b7a4?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00056b620 sp=0xc00056b600 pc=0x100039d96
runtime.selectgo(0xc00056b7a8, 0xc00056b7a0, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc00056b760 sp=0xc00056b620 pc=0x10004955e
runtime.ensureSigM.func1()
        /usr/local/go/src/runtime/signal_unix.go:1000 +0x187 fp=0xc00056b7e0 sp=0xc00056b760 pc=0x100061847
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00056b7e8 sp=0xc00056b7e0 pc=0x100069dc1
created by runtime.ensureSigM
        /usr/local/go/src/runtime/signal_unix.go:983 +0xbd

goroutine 41 [syscall]:
runtime.sigNoteSleep(0x0)
        /usr/local/go/src/runtime/os_darwin.go:123 +0x1e fp=0xc00056bfa0 sp=0xc00056bf68 pc=0x1000340de
os/signal.signal_recv()
        /usr/local/go/src/runtime/sigqueue.go:149 +0x28 fp=0xc00056bfc0 sp=0xc00056bfa0 pc=0x100065f48
os/signal.loop()
        /usr/local/go/src/os/signal/signal_unix.go:23 +0x19 fp=0xc00056bfe0 sp=0xc00056bfc0 pc=0x1005f05b9
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00056bfe8 sp=0xc00056bfe0 pc=0x100069dc1
created by os/signal.Notify.func1.1
        /usr/local/go/src/os/signal/signal.go:151 +0x2a

goroutine 43 [chan receive]:
runtime.gopark(0xc001520060?, 0xc000130540?, 0xb8?, 0x7e?, 0xc000567ed0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000567e68 sp=0xc000567e48 pc=0x100039d96
runtime.chanrecv(0xc001520060, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000567ef8 sp=0xc000567e68 pc=0x10000977d
runtime.chanrecv1(0x1027385e0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc000567f20 sp=0xc000567ef8 pc=0x100009278
fyne.io/fyne/v2/internal/driver/glfw.runOnDraw(0xc000226b40, 0xc00119a090)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/loop.go:85 +0x153 fp=0xc000567f98 sp=0xc000567f20 pc=0x100603173
fyne.io/fyne/v2/internal/driver/glfw.(*window).Close(0xc000226b40)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:211 +0x96 fp=0xc000567fc8 sp=0xc000567f98 pc=0x100606cf6
fyne.io/fyne/v2/internal/driver/glfw.(*window).processClosed.func1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:277 +0x26 fp=0xc000567fe0 sp=0xc000567fc8 pc=0x100607266
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000567fe8 sp=0xc000567fe0 pc=0x100069dc1
created by fyne.io/fyne/v2/internal/driver/glfw.(*window).processClosed
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:277 +0x6a

goroutine 44 [runnable]:
runtime.gopark(0xc000597b60?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0005685e8 sp=0xc0005685c8 pc=0x100039d96
runtime.chanrecv(0xc001520000, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000568678 sp=0xc0005685e8 pc=0x10000977d
runtime.chanrecv1(0x1027385e0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc0005686a0 sp=0xc000568678 pc=0x100009278
fyne.io/fyne/v2/internal/driver/glfw.runOnMain(0xc0007f61b0)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/loop.go:71 +0x111 fp=0xc000568710 sp=0xc0005686a0 pc=0x100602f31
fyne.io/fyne/v2/internal/driver/glfw.(*window).runOnMainWhenCreated(0xc0002261e0, 0xc0007f61b0)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:924 +0xdd fp=0xc000568760 sp=0xc000568710 pc=0x10060c15d
fyne.io/fyne/v2/internal/driver/glfw.(*window).RequestFocus(0xc0002261e0)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window_desktop.go:172 +0x7d fp=0xc000568780 sp=0xc000568760 pc=0x10060ce5d
fyne.io/fyne/v2/internal/driver/glfw.(*gLDriver).focusPreviousWindow(0x0?)
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/driver.go:141 +0x11a fp=0xc0005687c8 sp=0xc000568780 pc=0x100601b5a
fyne.io/fyne/v2/internal/driver/glfw.(*window).destroy.func1()
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:288 +0x26 fp=0xc0005687e0 sp=0xc0005687c8 pc=0x1006073a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0005687e8 sp=0xc0005687e0 pc=0x100069dc1
created by fyne.io/fyne/v2/internal/driver/glfw.(*window).destroy
        /Users/m/go/pkg/mod/fyne.io/fyne/v2@v2.3.4/internal/driver/glfw/window.go:288 +0xa5
exit status 2
michaeljsaenz commented 1 year ago

any updates regarding this issue? Thank you!

skoona commented 1 year ago

Again instead of creating a new issue for the same problem "SIGSEGV on main window close", let me add another occurrence to this one:

App: sknLineChart Go: v1.20.5 Fyne: v2.3.5 Host: iMac-2020 Intel, Graphics: AMD Radeon Pro 5700 8 GB, CPU: 3.8 GHz 8-Core Intel Core i7 OS: Ventura v13.4.1

Problem: consistent SIGSEGV on close of main window, Kill Interrupt signal (note handler in main) consistently shuts down cleanly.

How to reproduce? Run app and close main window; immediately of wait for 200 seconds and close main window. then try using Control-C which exits cleanly.

close-main-window.txt control-c-main-window.txt

andydotxyz commented 1 year ago

any updates regarding this issue? Thank you!

No, updates are posted when we have them. As far as I am aware none of the team have been able to replicate the issue. Are you able to see the same happen using the develop branch?

michaeljsaenz commented 1 year ago

any updates regarding this issue? Thank you!

No, updates are posted when we have them. As far as I am aware none of the team have been able to replicate the issue. Are you able to see the same happen using the develop branch?

thanks for update, I'll test with develop branch, if issue persists I'll debug further on my end... 👍🏽

skoona commented 1 year ago

As for my contribution to this topic. I've discovered that one out of three Mac machines running on to date Ventura have this crash-on-close-window issue. The iMac(intel) has the issue, M1 Mini, and M1 MacBookPro do not have the issue