Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bubbletea app hangs when quitting about 10% of the time. #741

Closed
collinvandyck opened this issue May 20, 2023 · 5 comments · Fixed by #757
Closed

bubbletea app hangs when quitting about 10% of the time. #741

collinvandyck opened this issue May 20, 2023 · 5 comments · Fixed by #757

Comments

@collinvandyck
Copy link

Describe the bug
When my model returns tea.Quit, sometimes, maybe 10% of the time, it won't actually quit. I was able to dump the goroutine stacks when it was hanging by sending it the ABRT signal and saw that it was blocking on this line:

r.done <- struct{}{}

Setup
Please complete the following information along with version numbers, if applicable.

  • OS [MacOS Ventura]
  • Shell [zsh]
  • Terminal Emulator [kitty]
  • Terminal Multiplexer [tmux]

To Reproduce

Run the following program. As soon as it starts, you can hit q to quit it. You might need to do this 10-20 times to get it to eventually hang when quitting.

go.mod

module gol

go 1.20

require (
	github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
	github.com/charmbracelet/bubbletea v0.24.0 // indirect
	github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect
	github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
	github.com/mattn/go-isatty v0.0.18 // indirect
	github.com/mattn/go-localereader v0.0.1 // indirect
	github.com/mattn/go-runewidth v0.0.14 // indirect
	github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b // indirect
	github.com/muesli/cancelreader v0.2.2 // indirect
	github.com/muesli/reflow v0.3.0 // indirect
	github.com/muesli/termenv v0.15.1 // indirect
	github.com/rivo/uniseg v0.2.0 // indirect
	golang.org/x/sync v0.1.0 // indirect
	golang.org/x/sys v0.6.0 // indirect
	golang.org/x/term v0.6.0 // indirect
	golang.org/x/text v0.3.8 // indirect
)

main.go

package main

import (
	"bytes"
	"math/rand"
	"time"

	tea "github.com/charmbracelet/bubbletea"
)

const fps = 20
const alive = "😂"
const dead = "🌊"

func main() {
	model := model{}
	p := tea.NewProgram(model)
	p.Run()
}

type board [][]bool

type model struct {
	board      board
	ready      bool
	lastUpdate time.Time
	ticked     bool
	last       tea.Msg
}

type TickMsg time.Time

// Init implements tea.Model
func (m model) Init() tea.Cmd {
	return doTick()
}

func doTick() tea.Cmd {
	return tea.Tick(time.Second/fps, func(t time.Time) tea.Msg {
		return TickMsg(t)
	})
}

// Update implements tea.Model
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
	m.last = msg
	m.lastUpdate = time.Now()
	m.ticked = false
	switch msg := msg.(type) {
	case tea.WindowSizeMsg:
		m.board = make([][]bool, msg.Height)
		for i := range m.board {
			m.board[i] = make([]bool, msg.Width)
		}
		m.seed()
		m.ready = true
	case TickMsg:
		if m.ready {
			m.board = m.tick()
		}
		m.ticked = true
		return m, doTick()
	case tea.KeyMsg:
		switch msg.String() {
		case "q", "esc", "ctrl+c":
			return m, tea.Quit
		default:
			m.seed()
		}
	}
	return m, nil
}

func (m model) seed() {
	liveRatio := .50 + rand.Float64()*0.25
	for i := range m.board {
		for j := range m.board[i] {
			if rand.Float64() < liveRatio {
				m.board[i][j] = true
			} else {
				m.board[i][j] = false
			}
		}
	}
}

func (m model) tick() board {
	res := make([][]bool, len(m.board))
	for i := range res {
		res[i] = make([]bool, len(m.board[i]))
	}
	for i := range m.board {
		for j := range m.board[i] {
			alive := m.board[i][j]
			res[i][j] = m.board[i][j]
			switch {
			case alive:
				n := m.countLiveNeighbors(i, j)
				if n < 2 || n > 3 {
					res[i][j] = false
				}
			default:
				n := m.countLiveNeighbors(i, j)
				if n == 3 {
					res[i][j] = true
				}
			}
		}
	}
	return res
}

func (m model) countLiveNeighbors(i, j int) int {
	var count int
	for x := i - 1; x <= i+1; x++ {
		for y := j - 1; y <= j+1; y++ {
			if x == i && y == j {
				continue
			}
			cx, cy := x, y
			if cx < 0 {
				cx = len(m.board) - 1
			}
			if cx >= len(m.board) {
				cx = 0
			}
			if cy < 0 {
				cy = len(m.board[cx]) - 1
			}
			if cy >= len(m.board[cx]) {
				cy = 0
			}
			if m.board[cx][cy] {
				count++
			}
		}
	}
	return count
}

// View implements tea.Model
func (m model) View() string {
	if !m.ready {
		return ""
	}
	buf := new(bytes.Buffer)
	for i := range m.board {
		for j := range m.board[i] {
			if m.board[i][j] {
				buf.WriteString(alive)
			} else {
				buf.WriteString(dead)
			}
		}
		if i != len(m.board)-1 {
			buf.WriteString("\n")
		}
	}
	return buf.String()
}

stack.txt

goroutine 0 [idle]:
runtime.kevent(0x5, 0x0, 0x0, 0x16fd720c8, 0x40, 0x16fd720a0)
        /usr/local/go/src/runtime/sys_darwin.go:453 +0x20 fp=0x16fd72040 sp=0x16fd72020 pc=0x1000db180
runtime.netpoll(0xf6c9c6)
        /usr/local/go/src/runtime/netpoll_kqueue.go:130 +0xfc fp=0x16fd728d0 sp=0x16fd72040 pc=0x1000b978c
runtime.findRunnable()
        /usr/local/go/src/runtime/proc.go:2971 +0x840 fp=0x16fd729d0 sp=0x16fd728d0 pc=0x1000c49d0
runtime.schedule()
        /usr/local/go/src/runtime/proc.go:3360 +0x98 fp=0x16fd72a10 sp=0x16fd729d0 pc=0x1000c5cf8
runtime.goexit0(0x14000106d00)
        /usr/local/go/src/runtime/proc.go:3687 +0x2ec fp=0x16fd72a50 sp=0x16fd72a10 pc=0x1000c6c2c
runtime.mcall()
        /usr/local/go/src/runtime/asm_arm64.s:192 +0x54 fp=0x16fd72a60 sp=0x16fd72a50 pc=0x1000e9a24

goroutine 1 [chan send]:
runtime.gopark(0x4?, 0x8?, 0x0?, 0x0?, 0x4?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x140000cb9b0 sp=0x140000cb990 pc=0x1000bf3a0
runtime.chansend(0x1400008c2a0, 0x140000cba88, 0x1, 0x10001400009e340?)
        /usr/local/go/src/runtime/chan.go:259 +0x42c fp=0x140000cba40 sp=0x140000cb9b0 pc=0x10009087c
runtime.chansend1(0x4?, 0x1001a76e0?)
        /usr/local/go/src/runtime/chan.go:145 +0x18 fp=0x140000cba70 sp=0x140000cba40 pc=0x100090438
github.com/charmbracelet/bubbletea.(*standardRenderer).stop.func1()
        /Users/collin/go/pkg/mod/github.com/charmbracelet/[email protected]/standard_renderer.go:99 +0x28 fp=0x140000cba90 sp=0x140000cba70 pc=0x10014c5a8
sync.(*Once).doSlow(0x1001ad418?, 0x140000a4010?)
        /usr/local/go/src/sync/once.go:74 +0x100 fp=0x140000cbaf0 sp=0x140000cba90 pc=0x1000f0530
sync.(*Once).Do(...)
        /usr/local/go/src/sync/once.go:65
github.com/charmbracelet/bubbletea.(*standardRenderer).stop(0x140000d60b0)
        /Users/collin/go/pkg/mod/github.com/charmbracelet/[email protected]/standard_renderer.go:98 +0x140 fp=0x140000cbc30 sp=0x140000cbaf0 pc=0x10014c4d0
github.com/charmbracelet/bubbletea.(*Program).shutdown(0x140000e8000, 0x4?)
        /Users/collin/go/pkg/mod/github.com/charmbracelet/[email protected]/tea.go:592 +0x48 fp=0x140000cbc50 sp=0x140000cbc30 pc=0x100152228
github.com/charmbracelet/bubbletea.(*Program).Run(0x140000e8000)
        /Users/collin/go/pkg/mod/github.com/charmbracelet/[email protected]/tea.go:524 +0x838 fp=0x140000cbee0 sp=0x140000cbc50 pc=0x100151d08
main.main()
        /Users/collin/code/bubble-text/main.go:18 +0x64 fp=0x140000cbf70 sp=0x140000cbee0 pc=0x100153894
runtime.main()
        /usr/local/go/src/runtime/proc.go:250 +0x200 fp=0x140000cbfd0 sp=0x140000cbf70 pc=0x1000bef90
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x140000cbfd0 sp=0x140000cbfd0 pc=0x1000ebf04

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x1400004afa0 sp=0x1400004af80 pc=0x1000bf3a0
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.forcegchelper()
        /usr/local/go/src/runtime/proc.go:305 +0xb0 fp=0x1400004afd0 sp=0x1400004afa0 pc=0x1000bf1f0
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400004afd0 sp=0x1400004afd0 pc=0x1000ebf04
created by runtime.init.6
        /usr/local/go/src/runtime/proc.go:293 +0x24

goroutine 3 [GC sweep wait]:
runtime.gopark(0x1?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x1400004b760 sp=0x1400004b740 pc=0x1000bf3a0
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.bgsweep(0x0?)
        /usr/local/go/src/runtime/mgcsweep.go:319 +0x100 fp=0x1400004b7b0 sp=0x1400004b760 pc=0x1000acdc0
runtime.gcenable.func1()
        /usr/local/go/src/runtime/mgc.go:178 +0x28 fp=0x1400004b7d0 sp=0x1400004b7b0 pc=0x1000a2038
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400004b7d0 sp=0x1400004b7d0 pc=0x1000ebf04
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:178 +0x6c

goroutine 4 [GC scavenge wait]:
runtime.gopark(0x20d5be48?, 0x20ca53a8?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x1400004bf50 sp=0x1400004bf30 pc=0x1000bf3a0
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.(*scavengerState).park(0x10025b240)
        /usr/local/go/src/runtime/mgcscavenge.go:400 +0x5c fp=0x1400004bf80 sp=0x1400004bf50 pc=0x1000aac8c
runtime.bgscavenge(0x0?)
        /usr/local/go/src/runtime/mgcscavenge.go:633 +0xa8 fp=0x1400004bfb0 sp=0x1400004bf80 pc=0x1000ab248
runtime.gcenable.func2()
        /usr/local/go/src/runtime/mgc.go:179 +0x28 fp=0x1400004bfd0 sp=0x1400004bfb0 pc=0x1000a1fd8
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400004bfd0 sp=0x1400004bfd0 pc=0x1000ebf04
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:179 +0xac

goroutine 17 [finalizer wait]:
runtime.gopark(0x1400004a5a8?, 0x6000010009ffe8?, 0x48?, 0x5a?, 0x1?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x1400004a580 sp=0x1400004a560 pc=0x1000bf3a0
runtime.runfinq()
        /usr/local/go/src/runtime/mfinal.go:193 +0x100 fp=0x1400004a7d0 sp=0x1400004a580 pc=0x1000a1100
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400004a7d0 sp=0x1400004a7d0 pc=0x1000ebf04
created by runtime.createfing
        /usr/local/go/src/runtime/mfinal.go:163 +0x80

goroutine 26 [GC worker (idle)]:
runtime.gopark(0x14000046fa8?, 0x14000046f78?, 0x0?, 0x0?, 0x1?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x14000046f40 sp=0x14000046f20 pc=0x1000bf3a0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x14000046fd0 sp=0x14000046f40 pc=0x1000a3b94
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x14000046fd0 sp=0x14000046fd0 pc=0x1000ebf04
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 5 [select, locked to thread]:
runtime.gopark(0x1400004c7a0?, 0x2?, 0x88?, 0xc6?, 0x1400004c79c?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x1400004c640 sp=0x1400004c620 pc=0x1000bf3a0
runtime.selectgo(0x1400004c7a0, 0x1400004c798, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x68c fp=0x1400004c750 sp=0x1400004c640 pc=0x1000cef1c
runtime.ensureSigM.func1()
        /usr/local/go/src/runtime/signal_unix.go:1000 +0x168 fp=0x1400004c7d0 sp=0x1400004c750 pc=0x1000e5688
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400004c7d0 sp=0x1400004c7d0 pc=0x1000ebf04
created by runtime.ensureSigM
        /usr/local/go/src/runtime/signal_unix.go:983 +0xd8

goroutine 20 [sync.Mutex.Lock]:
runtime.gopark(0x1002626a0?, 0x1000db59c?, 0x20?, 0x21?, 0x1000daf04?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x140000957f0 sp=0x140000957d0 pc=0x1000bf3a0
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.semacquire1(0x140000aa13c, 0x7d?, 0x3, 0x1, 0x7f?)
        /usr/local/go/src/runtime/sema.go:160 +0x20c fp=0x14000095850 sp=0x140000957f0 pc=0x1000cfdfc
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/sema.go:77 +0x28 fp=0x14000095890 sp=0x14000095850 pc=0x1000e8128
sync.(*Mutex).lockSlow(0x140000aa138)
        /usr/local/go/src/sync/mutex.go:171 +0x174 fp=0x140000958e0 sp=0x14000095890 pc=0x1000f0124
sync.(*Mutex).Lock(...)
        /usr/local/go/src/sync/mutex.go:90
github.com/charmbracelet/bubbletea.(*standardRenderer).flush(0x140000d60b0?)
        /Users/collin/go/pkg/mod/github.com/charmbracelet/[email protected]/standard_renderer.go:136 +0x88 fp=0x14000095f40 sp=0x140000958e0 pc=0x10014c968
github.com/charmbracelet/bubbletea.(*standardRenderer).listen(0x140000d60b0)
        /Users/collin/go/pkg/mod/github.com/charmbracelet/[email protected]/standard_renderer.go:129 +0x28 fp=0x14000095fb0 sp=0x14000095f40 pc=0x10014c868
github.com/charmbracelet/bubbletea.(*standardRenderer).start.func1()
        /Users/collin/go/pkg/mod/github.com/charmbracelet/[email protected]/standard_renderer.go:86 +0x28 fp=0x14000095fd0 sp=0x14000095fb0 pc=0x10014c358
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x14000095fd0 sp=0x14000095fd0 pc=0x1000ebf04
created by github.com/charmbracelet/bubbletea.(*standardRenderer).start
        /Users/collin/go/pkg/mod/github.com/charmbracelet/[email protected]/standard_renderer.go:86 +0xb4

goroutine 34 [syscall]:
runtime.sigNoteSleep(0x0)
        /usr/local/go/src/runtime/os_darwin.go:123 +0x20 fp=0x1400010c790 sp=0x1400010c750 pc=0x1000b9d70
os/signal.signal_recv()
        /usr/local/go/src/runtime/sigqueue.go:149 +0x2c fp=0x1400010c7b0 sp=0x1400010c790 pc=0x1000e835c
os/signal.loop()
        /usr/local/go/src/os/signal/signal_unix.go:23 +0x1c fp=0x1400010c7d0 sp=0x1400010c7b0 pc=0x10014716c
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400010c7d0 sp=0x1400010c7d0 pc=0x1000ebf04
created by os/signal.Notify.func1.1
        /usr/local/go/src/os/signal/signal.go:151 +0x28

goroutine 25 [GC worker (idle)]:
runtime.gopark(0x140000d60b0?, 0x14000047780?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x14000047740 sp=0x14000047720 pc=0x1000bf3a0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x140000477d0 sp=0x14000047740 pc=0x1000a3b94
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x140000477d0 sp=0x140000477d0 pc=0x1000ebf04
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 51 [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x140001f6740 sp=0x140001f6720 pc=0x1000bf3a0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x140001f67d0 sp=0x140001f6740 pc=0x1000a3b94
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x140001f67d0 sp=0x140001f67d0 pc=0x1000ebf04
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 6 [GC worker (idle)]:
runtime.gopark(0x140000e8000?, 0x1400008c240?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x14000046740 sp=0x14000046720 pc=0x1000bf3a0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x140000467d0 sp=0x14000046740 pc=0x1000a3b94
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x140000467d0 sp=0x140000467d0 pc=0x1000ebf04
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 7 [GC worker (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x1400004cf40 sp=0x1400004cf20 pc=0x1000bf3a0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x1400004cfd0 sp=0x1400004cf40 pc=0x1000a3b94
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400004cfd0 sp=0x1400004cfd0 pc=0x1000ebf04
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 8 [GC worker (idle)]:
runtime.gopark(0x4cdd7e72e0c20?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x1400004d740 sp=0x1400004d720 pc=0x1000bf3a0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x1400004d7d0 sp=0x1400004d740 pc=0x1000a3b94
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400004d7d0 sp=0x1400004d7d0 pc=0x1000ebf04
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 52 [GC worker (idle)]:
runtime.gopark(0x4cdd7e72df362?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x140001f6f40 sp=0x140001f6f20 pc=0x1000bf3a0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x140001f6fd0 sp=0x140001f6f40 pc=0x1000a3b94
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x140001f6fd0 sp=0x140001f6fd0 pc=0x1000ebf04
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 9 [GC worker (idle)]:
runtime.gopark(0x4cdd7e72d8b8b?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x1400004df40 sp=0x1400004df20 pc=0x1000bf3a0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x1400004dfd0 sp=0x1400004df40 pc=0x1000a3b94
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x1400004dfd0 sp=0x1400004dfd0 pc=0x1000ebf04
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

r0      0x4
r1      0x0
r2      0x0
r3      0x16fd720c8
r4      0x40
r5      0x16fd720a0
r6      0x0
r7      0x4cdda3d4f89b0
r8      0x10025b9e0
r9      0x1
r10     0x1
r11     0x5
r12     0x0
r13     0x16fd71fd0
r14     0x100
r15     0x0
r16     0x16b
r17     0x1a6396058
r18     0x0
r19     0x16fd728b8
r20     0x16fd72040
r21     0x3
r22     0x1000ebf04
r23     0x140000cbe30
r24     0x16fd72b60
r25     0x1
r26     0x1001acba8
r27     0x10023c000
r28     0x10025b3c0
r29     0x16fd71fb8
lr      0x1000ed0a8
sp      0x16fd71fc0
pc      0x1a6396060
fault   0x1a6396060
@nemith
Copy link

nemith commented Jun 2, 2023

I have ran into this as well.

@muesli
Copy link
Contributor

muesli commented Jun 2, 2023

Could you try out #757 and see if that fixes your hang?

@collinvandyck
Copy link
Author

@muesli I ran the sample code against #757 and couldn't get it to stall after trying a number of times 🚀

@muesli
Copy link
Contributor

muesli commented Jun 4, 2023

Thank you for confirming! Will merge and push a new fix release.

@muesli
Copy link
Contributor

muesli commented Jun 6, 2023

Fixed in v0.24.2!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants