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

cmd/acme: more deadlocks #85

Open
rogpeppe opened this issue Nov 18, 2021 · 7 comments
Open

cmd/acme: more deadlocks #85

rogpeppe opened this issue Nov 18, 2021 · 7 comments

Comments

@rogpeppe
Copy link
Collaborator

rogpeppe commented Nov 18, 2021

Making a new issue for deadlocks found after the recent fixes.

I've also instrumented my version to report which goroutine id held the deadlock and where it was acquired.

@rogpeppe
Copy link
Collaborator Author

rogpeppe commented Nov 18, 2021

lock currently held by goroutine 30; xfideventread
Commit 8c0a09b.

PC=0x4649c1 m=0 sigcode=0

goroutine 0 [idle]:
runtime.futex()
	/home/rogpeppe/go/src/runtime/sys_linux_amd64.s:552 +0x21
runtime.futexsleep(0xc000032500?, 0x0?, 0x0?)
	/home/rogpeppe/go/src/runtime/os_linux.go:56 +0x36
runtime.notesleep(0x6e7250)
	/home/rogpeppe/go/src/runtime/lock_futex.go:159 +0x87
runtime.mPark()
	/home/rogpeppe/go/src/runtime/proc.go:1432 +0x2a
runtime.stopm()
	/home/rogpeppe/go/src/runtime/proc.go:2402 +0x78
runtime.findrunnable()
	/home/rogpeppe/go/src/runtime/proc.go:2978 +0x865
runtime.schedule()
	/home/rogpeppe/go/src/runtime/proc.go:3361 +0x239
runtime.goschedImpl(0xc00008a340)
	/home/rogpeppe/go/src/runtime/proc.go:3525 +0xc5
runtime.gosched_m(0xc00008a340?)
	/home/rogpeppe/go/src/runtime/proc.go:3533 +0x31
runtime.mcall()
	/home/rogpeppe/go/src/runtime/asm_amd64.s:433 +0x43

goroutine 1 [chan receive, 38 minutes]:
main.main()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:225 +0xd3c

goroutine 5 [sleep]:
time.Sleep(0x2540be400)
	/home/rogpeppe/go/src/runtime/time.go:194 +0x12e
main.init.0.func1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:793 +0x35
created by main.init.0
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:791 +0x25

goroutine 7 [chan receive, 38 minutes]:
main.main.func5()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:117 +0xb9
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:116 +0x6af

goroutine 50 [chan send]:
9fans.net/go/draw.mouseproc(0x0?, 0xc0000ae000, 0x4c10ea?, 0x0?)
	/home/rogpeppe/other/9fans/draw/mouse.go:63 +0x5c
created by 9fans.net/go/draw.(*Display).InitMouse
	/home/rogpeppe/other/9fans/draw/mouse.go:49 +0x12e

goroutine 51 [IO wait]:
internal/poll.runtime_pollWait(0x7f7fc8114b38, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0000121e0?, 0xc0000bf9cc?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000121e0, {0xc0000bf9cc, 0x4, 0x4})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc0000bc0c0, {0xc0000bf9cc?, 0xc000114af0?, 0x44a972?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.ReadAtLeast({0x5ed880, 0xc0000bc0c0}, {0xc0000bf9cc, 0x4, 0x4}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/draw/drawfcall.ReadMsg({0x5ed880, 0xc0000bc0c0})
	/home/rogpeppe/other/9fans/draw/drawfcall/msg.go:232 +0x59
9fans.net/go/draw/drawfcall.(*Conn).RPC(0xc00009e0a0, 0xc000114d28, 0xc0001f0240)
	/home/rogpeppe/other/9fans/draw/drawfcall/mux.go:93 +0x425
9fans.net/go/draw/drawfcall.(*Conn).ReadKbd(0x0?)
	/home/rogpeppe/other/9fans/draw/drawfcall/mux.go:156 +0x7c
9fans.net/go/draw.kbdproc(0xc0000ae000, 0x0?)
	/home/rogpeppe/other/9fans/draw/keyboard.go:43 +0x48
created by 9fans.net/go/draw.(*Display).InitKeyboard
	/home/rogpeppe/other/9fans/draw/keyboard.go:37 +0x8a

goroutine 52 [IO wait, 3 minutes]:
internal/poll.runtime_pollWait(0x7f7fc8114798, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0000f8080?, 0xc00002a080?, 0x0)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000f8080, {0xc00002a080, 0x4, 0x80})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0000f8080, {0xc00002a080?, 0x101c000406078?, 0x7f7fef64e6f0?})
	/home/rogpeppe/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0000fa000, {0xc00002a080?, 0xc000110b28?, 0x44a972?})
	/home/rogpeppe/go/src/net/net.go:183 +0x45
io.ReadAtLeast({0x5ed820, 0xc0000fa000}, {0xc00002a080, 0x4, 0x80}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/plan9.ReadFcall({0x5ed820, 0xc0000fa000})
	/home/rogpeppe/other/9fans/plan9/fcall.go:421 +0x5b
9fans.net/go/plan9/client.(*conn).read(0xc0000d4000)
	/home/rogpeppe/other/9fans/plan9/client/conn.go:211 +0x51
9fans.net/go/plan9/client.(*conn).rpc(0xc0000d4000, 0xc000110ca0, 0x0)
	/home/rogpeppe/other/9fans/plan9/client/conn.go:271 +0x2b8
9fans.net/go/plan9/client.(*Fid).readAt(0xc0000fc0c0, {0xc0003fa000, 0x1000, 0x8?}, 0xffffffffffffffff)
	/home/rogpeppe/other/9fans/plan9/client/fid.go:190 +0x19e
9fans.net/go/plan9/client.(*Fid).Read(0x3?, {0xc0003fa000?, 0xc000110e30?, 0x4370a0?})
	/home/rogpeppe/other/9fans/plan9/client/fid.go:155 +0x25
bufio.(*Reader).fill(0xc000406e40)
	/home/rogpeppe/go/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadByte(0xc000406e40)
	/home/rogpeppe/go/src/bufio/bufio.go:262 +0x2c
9fans.net/go/plumb.(*reader).readLine(0xc000110ef0)
	/home/rogpeppe/other/9fans/plumb/plumb.go:144 +0x56
9fans.net/go/plumb.(*Message).Recv(0xc0003dfda0, {0x5ed620, 0xc000406e40})
	/home/rogpeppe/other/9fans/plumb/plumb.go:109 +0x98
main.plumbthread()
	/home/rogpeppe/other/9fans/cmd/acme/look1.go:68 +0x2ee
created by main.startplumbing
	/home/rogpeppe/other/9fans/cmd/acme/look1.go:93 +0x25

goroutine 53 [IO wait]:
internal/poll.runtime_pollWait(0x7f7fc8114a50, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc00009c9c0?, 0xc00002b780?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc00009c9c0, {0xc00002b780, 0x4, 0x80})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc000010010, {0xc00002b780?, 0xc000113ca0?, 0x44a972?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.ReadAtLeast({0x5ed880, 0xc000010010}, {0xc00002b780, 0x4, 0x80}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/plan9.ReadFcall({0x5ed880, 0xc000010010})
	/home/rogpeppe/other/9fans/plan9/fcall.go:421 +0x5b
main.fsysproc()
	/home/rogpeppe/other/9fans/cmd/acme/fsys1.go:136 +0x7c
created by main.fsysinit
	/home/rogpeppe/other/9fans/cmd/acme/fsys1.go:126 +0x39c

goroutine 39 [chan receive]:
main.xfidctl(0xc000322000)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 24 [IO wait, 38 minutes]:
internal/poll.runtime_pollWait(0x7f7fc8114968, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc000012540?, 0xc0004c5fb8?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000012540, {0xc0004c5fb8, 0x2000, 0x2000})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc0000fa068, {0xc0004c5fb8?, 0x0?, 0x0?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
main.acmeerrorproc()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:321 +0xaf
created by main.acmeerrorinit
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:338 +0x9e

goroutine 25 [select]:
main.keyboardthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:369 +0xe5
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:218 +0xcf8

goroutine 26 [semacquire]:
sync.runtime_SemacquireMutex(0xc0000a0358?, 0xa0?, 0xc000103c28?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.bigLock({0x5b24f3?, 0xa?})
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:810 +0x4f
9fans.net/go/cmd/acme/internal/ui.Textselect(0xc00042ccf8)
	/home/rogpeppe/other/9fans/cmd/acme/internal/ui/text.go:480 +0x56e
main.mousethread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:553 +0x7d8
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:219 +0xd05

goroutine 27 [select, 6 minutes]:
main.waitthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:608 +0x17a
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:220 +0xd11

goroutine 28 [select]:
main.xfidallocthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:717 +0x79
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:221 +0xd1d

goroutine 29 [chan receive, 6 minutes]:
main.newwindowthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:742 +0x26
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:222 +0xd29

goroutine 8 [chan receive, 17 minutes]:
main.xfidctl(0xc00002e400)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 30 [semacquire]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0xc0004c1b88?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0xc00042cb00)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
9fans.net/go/cmd/acme/internal/wind.Winlock1(0x0?, 0x46?)
	/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:308 +0x45
9fans.net/go/cmd/acme/internal/wind.Winlock(0x5b3415?, 0xd?)
	/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:302 +0x45
main.xfideventread(0xc00014e200, 0xc00042cb00)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:1013 +0x117
main.xfidread(0xc00014e200)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:331 +0x57f
main.xfidctl(0xc00014e200)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:71 +0x62
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 44 [chan receive, 38 minutes]:
main.xfideventread(0xc000326100, 0xc00048b600)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:1011 +0xe8
main.xfidread(0xc000326100)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:331 +0x57f
main.xfidctl(0xc000326100)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:71 +0x62
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 1169 [chan receive]:
main.xfidctl(0xc000326980)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 42 [IO wait, 38 minutes]:
internal/poll.runtime_pollWait(0x7f7fc81145c8, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc000396660?, 0xc0001f8000?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000396660, {0xc0001f8000, 0x8000, 0x8000})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc000148020, {0xc0001f8000?, 0xc000066180?, 0x0?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.copyBuffer({0x5ed600, 0xc000066180}, {0x5ed880, 0xc000148020}, {0x0, 0x0, 0x0})
	/home/rogpeppe/go/src/io/io.go:426 +0x1b2
io.Copy(...)
	/home/rogpeppe/go/src/io/io.go:385
9fans.net/go/cmd/acme/internal/exec.fsopenfd.func2()
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1142 +0x45
created by 9fans.net/go/cmd/acme/internal/exec.fsopenfd
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1141 +0x118

goroutine 43 [syscall, 38 minutes]:
syscall.Syscall6(0xf7, 0x1, 0x131919, 0xc0003b3e28, 0x1000004, 0x0, 0x0)
	/home/rogpeppe/go/src/syscall/asm_linux_amd64.s:43 +0x5
os.(*Process).blockUntilWaitable(0xc0003720c0)
	/home/rogpeppe/go/src/os/wait_waitid.go:32 +0x9c
os.(*Process).wait(0xc0003720c0)
	/home/rogpeppe/go/src/os/exec_unix.go:22 +0x28
os.(*Process).Wait(...)
	/home/rogpeppe/go/src/os/exec.go:132
os/exec.(*Cmd).Wait(0xc00013e160)
	/home/rogpeppe/go/src/os/exec/exec.go:507 +0x54
9fans.net/go/cmd/acme/internal/exec.runproc.func1()
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1054 +0x25
created by 9fans.net/go/cmd/acme/internal/exec.runproc
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1053 +0xffc

goroutine 1117 [chan receive]:
main.xfidctl(0xc00014e140)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 1348 [syscall, 6 minutes]:
syscall.Syscall6(0xf7, 0x1, 0x13256e, 0xc0003af628, 0x1000004, 0x0, 0x0)
	/home/rogpeppe/go/src/syscall/asm_linux_amd64.s:43 +0x5
os.(*Process).blockUntilWaitable(0xc00072e960)
	/home/rogpeppe/go/src/os/wait_waitid.go:32 +0x9c
os.(*Process).wait(0xc00072e960)
	/home/rogpeppe/go/src/os/exec_unix.go:22 +0x28
os.(*Process).Wait(...)
	/home/rogpeppe/go/src/os/exec.go:132
os/exec.(*Cmd).Wait(0xc00013e2c0)
	/home/rogpeppe/go/src/os/exec/exec.go:507 +0x54
9fans.net/go/cmd/acme/internal/exec.runproc.func1()
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1054 +0x25
created by 9fans.net/go/cmd/acme/internal/exec.runproc
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1053 +0xffc

goroutine 1312 [IO wait, 6 minutes]:
internal/poll.runtime_pollWait(0x7f7fc8114228, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc000763080?, 0xc000810000?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000763080, {0xc000810000, 0x8000, 0x8000})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc0000fa110, {0xc000810000?, 0xc0000fc210?, 0xc000106f50?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.copyBuffer({0x5ed600, 0xc0000fc210}, {0x5ed880, 0xc0000fa110}, {0x0, 0x0, 0x0})
	/home/rogpeppe/go/src/io/io.go:426 +0x1b2
io.Copy(...)
	/home/rogpeppe/go/src/io/io.go:385
9fans.net/go/cmd/acme/internal/exec.fsopenfd.func2()
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1142 +0x45
created by 9fans.net/go/cmd/acme/internal/exec.fsopenfd
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1141 +0x118

goroutine 1367 [semacquire]:
sync.runtime_SemacquireMutex(0x406fe0?, 0x40?, 0xc0003ac7a0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

rax    0xca
rbx    0x0
rcx    0x4649c3
rdx    0x0
rdi    0x6e7250
rsi    0x80
rbp    0x7ffd0db6bf60
rsp    0x7ffd0db6bf18
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x6ff
r13    0x4
r14    0x6e6920
r15    0x7f7fc81831a0
rip    0x4649c1
rflags 0x286
cs     0x33
fs     0x0

@rogpeppe
Copy link
Collaborator Author

rogpeppe commented Nov 18, 2021

This one happened very soon after startup.
Currently held by goroutine 55; xfideventread
Commit 8c0a09b.

PC=0x4649c1 m=0 sigcode=0

goroutine 0 [idle]:
runtime.futex()
	/home/rogpeppe/go/src/runtime/sys_linux_amd64.s:552 +0x21
runtime.futexsleep(0xc000040500?, 0x40c893?, 0x1e?)
	/home/rogpeppe/go/src/runtime/os_linux.go:56 +0x36
runtime.notesleep(0x6e7250)
	/home/rogpeppe/go/src/runtime/lock_futex.go:159 +0x87
runtime.mPark()
	/home/rogpeppe/go/src/runtime/proc.go:1432 +0x2a
runtime.stopm()
	/home/rogpeppe/go/src/runtime/proc.go:2402 +0x78
runtime.findrunnable()
	/home/rogpeppe/go/src/runtime/proc.go:2978 +0x865
runtime.schedule()
	/home/rogpeppe/go/src/runtime/proc.go:3361 +0x239
runtime.park_m(0xc00010e9c0?)
	/home/rogpeppe/go/src/runtime/proc.go:3510 +0x14d
runtime.mcall()
	/home/rogpeppe/go/src/runtime/asm_amd64.s:433 +0x43

goroutine 1 [chan receive, 8 minutes]:
main.main()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:225 +0xd3c

goroutine 21 [select]:
main.init.0.func1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:800 +0xd5
created by main.init.0
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:791 +0x25

goroutine 23 [chan receive, 8 minutes]:
main.main.func5()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:117 +0xb9
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:116 +0x6af

goroutine 50 [chan send, 4 minutes]:
9fans.net/go/draw.mouseproc(0x0?, 0xc0000be000, 0x4c10ea?, 0x0?)
	/home/rogpeppe/other/9fans/draw/mouse.go:63 +0x5c
created by 9fans.net/go/draw.(*Display).InitMouse
	/home/rogpeppe/other/9fans/draw/mouse.go:49 +0x12e

goroutine 51 [IO wait, 2 minutes]:
internal/poll.runtime_pollWait(0x7f7906146cd8, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0000122a0?, 0xc0005b2010?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000122a0, {0xc0005b2010, 0x4, 0x4})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc000010008, {0xc0005b2010?, 0xc00012caf0?, 0x44a972?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.ReadAtLeast({0x5ed880, 0xc000010008}, {0xc0005b2010, 0x4, 0x4}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/draw/drawfcall.ReadMsg({0x5ed880, 0xc000010008})
	/home/rogpeppe/other/9fans/draw/drawfcall/msg.go:232 +0x59
9fans.net/go/draw/drawfcall.(*Conn).RPC(0xc00007a0a0, 0xc00012cd28, 0xc000352000)
	/home/rogpeppe/other/9fans/draw/drawfcall/mux.go:93 +0x425
9fans.net/go/draw/drawfcall.(*Conn).ReadKbd(0x0?)
	/home/rogpeppe/other/9fans/draw/drawfcall/mux.go:156 +0x7c
9fans.net/go/draw.kbdproc(0xc0000be000, 0x0?)
	/home/rogpeppe/other/9fans/draw/keyboard.go:43 +0x48
created by 9fans.net/go/draw.(*Display).InitKeyboard
	/home/rogpeppe/other/9fans/draw/keyboard.go:37 +0x8a

goroutine 52 [IO wait, 7 minutes]:
internal/poll.runtime_pollWait(0x7f7906146938, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0002b4080?, 0xc0002d4480?, 0x0)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0002b4080, {0xc0002d4480, 0x4, 0x80})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0002b4080, {0xc0002d4480?, 0x100c000128aa8?, 0x7f78fefc1e30?})
	/home/rogpeppe/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0000a2018, {0xc0002d4480?, 0xc000128b28?, 0x44a972?})
	/home/rogpeppe/go/src/net/net.go:183 +0x45
io.ReadAtLeast({0x5ed820, 0xc0000a2018}, {0xc0002d4480, 0x4, 0x80}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/plan9.ReadFcall({0x5ed820, 0xc0000a2018})
	/home/rogpeppe/other/9fans/plan9/fcall.go:421 +0x5b
9fans.net/go/plan9/client.(*conn).read(0xc000122000)
	/home/rogpeppe/other/9fans/plan9/client/conn.go:211 +0x51
9fans.net/go/plan9/client.(*conn).rpc(0xc000122000, 0xc000128ca0, 0x0)
	/home/rogpeppe/other/9fans/plan9/client/conn.go:271 +0x2b8
9fans.net/go/plan9/client.(*Fid).readAt(0xc0002b60c0, {0xc0000fc000, 0x1000, 0x8?}, 0xffffffffffffffff)
	/home/rogpeppe/other/9fans/plan9/client/fid.go:190 +0x19e
9fans.net/go/plan9/client.(*Fid).Read(0x3?, {0xc0000fc000?, 0xc000128e70?, 0x48327a?})
	/home/rogpeppe/other/9fans/plan9/client/fid.go:155 +0x25
bufio.(*Reader).fill(0xc0002bf3e0)
	/home/rogpeppe/go/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadByte(0xc0002bf3e0)
	/home/rogpeppe/go/src/bufio/bufio.go:262 +0x2c
9fans.net/go/plumb.(*reader).readLine(0xc000128ef0)
	/home/rogpeppe/other/9fans/plumb/plumb.go:144 +0x56
9fans.net/go/plumb.(*Message).Recv(0xc00041ac60, {0x5ed620, 0xc0002bf3e0})
	/home/rogpeppe/other/9fans/plumb/plumb.go:109 +0x98
main.plumbthread()
	/home/rogpeppe/other/9fans/cmd/acme/look1.go:68 +0x2ee
created by main.startplumbing
	/home/rogpeppe/other/9fans/cmd/acme/look1.go:93 +0x25

goroutine 53 [IO wait, 5 minutes]:
internal/poll.runtime_pollWait(0x7f7906146bf0, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0000a4960?, 0xc00002ba00?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000a4960, {0xc00002ba00, 0x4, 0x80})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc0002a8010, {0xc00002ba00?, 0xc000129ca0?, 0x44a972?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.ReadAtLeast({0x5ed880, 0xc0002a8010}, {0xc00002ba00, 0x4, 0x80}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/plan9.ReadFcall({0x5ed880, 0xc0002a8010})
	/home/rogpeppe/other/9fans/plan9/fcall.go:421 +0x5b
main.fsysproc()
	/home/rogpeppe/other/9fans/cmd/acme/fsys1.go:136 +0x7c
created by main.fsysinit
	/home/rogpeppe/other/9fans/cmd/acme/fsys1.go:126 +0x39c

goroutine 55 [semacquire, 4 minutes]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0xc000321b88?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0xc000141b80)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
9fans.net/go/cmd/acme/internal/wind.Winlock1(0x0?, 0x46?)
	/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:308 +0x45
9fans.net/go/cmd/acme/internal/wind.Winlock(0x5b3415?, 0xd?)
	/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:302 +0x45
main.xfideventread(0xc00002e040, 0xc000141b80)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:1013 +0x117
main.xfidread(0xc00002e040)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:331 +0x57f
main.xfidctl(0xc00002e040)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:71 +0x62
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 103 [semacquire, 4 minutes]:
sync.runtime_SemacquireMutex(0x406fe0?, 0x0?, 0xc0002877a0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 32 [chan receive, 5 minutes]:
main.xfidctl(0xc00009e600)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 24 [IO wait, 8 minutes]:
internal/poll.runtime_pollWait(0x7f7906146768, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc000012840?, 0xc000325fb8?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000012840, {0xc000325fb8, 0x2000, 0x2000})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc000010180, {0xc000325fb8?, 0x0?, 0x0?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
main.acmeerrorproc()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:321 +0xaf
created by main.acmeerrorinit
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:338 +0x9e

goroutine 25 [semacquire, 2 minutes]:
sync.runtime_SemacquireMutex(0xc00031e000?, 0x0?, 0xc000416f00?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.bigLock({0x5b3a60?, 0xf?})
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:810 +0x4f
main.keyboardthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:383 +0x187
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:218 +0xcf8

goroutine 26 [semacquire, 4 minutes]:
sync.runtime_SemacquireMutex(0xc0000284d8?, 0xc0?, 0xc00010f748?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.bigLock({0x5b24f3?, 0xa?})
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:810 +0x4f
9fans.net/go/cmd/acme/internal/ui.Textselect(0xc000141d78)
	/home/rogpeppe/other/9fans/cmd/acme/internal/ui/text.go:480 +0x56e
main.mousethread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:553 +0x7d8
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:219 +0xd05

goroutine 27 [select, 8 minutes]:
main.waitthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:608 +0x17a
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:220 +0xd11

goroutine 28 [select, 5 minutes]:
main.xfidallocthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:717 +0x79
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:221 +0xd1d

goroutine 29 [chan receive, 8 minutes]:
main.newwindowthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:742 +0x26
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:222 +0xd29

goroutine 30 [chan receive, 5 minutes]:
main.xfidctl(0xc00009e480)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 31 [IO wait, 8 minutes]:
internal/poll.runtime_pollWait(0x7f7906146b08, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc000012b40?, 0xc00036e000?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000012b40, {0xc00036e000, 0x8000, 0x8000})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc000010190, {0xc00036e000?, 0xc0000980f0?, 0x0?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.copyBuffer({0x5ed600, 0xc0000980f0}, {0x5ed880, 0xc000010190}, {0x0, 0x0, 0x0})
	/home/rogpeppe/go/src/io/io.go:426 +0x1b2
io.Copy(...)
	/home/rogpeppe/go/src/io/io.go:385
9fans.net/go/cmd/acme/internal/exec.fsopenfd.func2()
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1142 +0x45
created by 9fans.net/go/cmd/acme/internal/exec.fsopenfd
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1141 +0x118

goroutine 56 [syscall, 8 minutes]:
syscall.Syscall6(0xf7, 0x1, 0x132791, 0xc000284e28, 0x1000004, 0x0, 0x0)
	/home/rogpeppe/go/src/syscall/asm_linux_amd64.s:43 +0x5
os.(*Process).blockUntilWaitable(0xc0000a8180)
	/home/rogpeppe/go/src/os/wait_waitid.go:32 +0x9c
os.(*Process).wait(0xc0000a8180)
	/home/rogpeppe/go/src/os/exec_unix.go:22 +0x28
os.(*Process).Wait(...)
	/home/rogpeppe/go/src/os/exec.go:132
os/exec.(*Cmd).Wait(0xc00037c000)
	/home/rogpeppe/go/src/os/exec/exec.go:507 +0x54
9fans.net/go/cmd/acme/internal/exec.runproc.func2()
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1087 +0x25
created by 9fans.net/go/cmd/acme/internal/exec.runproc
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1086 +0xbbf

goroutine 11 [chan receive, 5 minutes]:
main.xfidctl(0xc00009e940)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 43 [semacquire, 4 minutes]:
sync.runtime_SemacquireMutex(0x406fe0?, 0x20?, 0xc0002e37a0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 14 [semacquire, 2 minutes]:
sync.runtime_SemacquireMutex(0x406fe0?, 0xe0?, 0xc0002847a0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 44 [semacquire, 4 minutes]:
sync.runtime_SemacquireMutex(0xc00004dfb0?, 0x0?, 0x0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 104 [semacquire, 4 minutes]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 105 [semacquire, 2 minutes]:
sync.runtime_SemacquireMutex(0x0?, 0xe8?, 0xc000028480?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 106 [semacquire, 2 minutes]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 107 [semacquire, 2 minutes]:
sync.runtime_SemacquireMutex(0x0?, 0x50?, 0x0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 15 [semacquire]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

goroutine 108 [semacquire]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/home/rogpeppe/go/src/runtime/sema.go:71 +0x25
sync.(*Mutex).lockSlow(0x72a788)
	/home/rogpeppe/go/src/sync/mutex.go:153 +0x165
sync.(*Mutex).Lock(...)
	/home/rogpeppe/go/src/sync/mutex.go:81
main.init.0.func1.1()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:796 +0x49
created by main.init.0.func1
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:795 +0x8a

rax    0xca
rbx    0x0
rcx    0x4649c3
rdx    0x0
rdi    0x6e7250
rsi    0x80
rbp    0x7ffca7b7aad8
rsp    0x7ffca7b7aa90
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0xce
r13    0x4
r14    0x6e6920
r15    0x2
rip    0x4649c1
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

@rogpeppe
Copy link
Collaborator Author

I added some instrumentation to all uses of sync.Mutex that records some stack information about acquirer:

acme: goroutine 51
	probable deadlock acquiring mutex ""
	originally acquired by goroutine 30
	callers:
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:308: 9fans.net/go/cmd/acme/internal/wind.Winlock1
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:302: 9fans.net/go/cmd/acme/internal/wind.Winlock
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:544: main.mousethread
		/home/rogpeppe/go/src/runtime/asm_amd64.s:1579: runtime.goexit
acme: goroutine 30
	probable deadlock acquiring mutex "bigLock"
	originally acquired by goroutine 51
	callers:
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:785: main.bigLock
		/home/rogpeppe/other/9fans/cmd/acme/xfid.go:1012: main.xfideventread
		/home/rogpeppe/other/9fans/cmd/acme/xfid.go:331: main.xfidread
		/home/rogpeppe/other/9fans/cmd/acme/xfid.go:71: main.xfidctl
		/home/rogpeppe/go/src/runtime/asm_amd64.s:1579: runtime.goexit


goroutine 0 [idle]:
runtime.futex()
	/home/rogpeppe/go/src/runtime/sys_linux_amd64.s:552 +0x21
runtime.futexsleep(0xc000032a00?, 0x4354f4?, 0xc000000000?)
	/home/rogpeppe/go/src/runtime/os_linux.go:56 +0x36
runtime.notesleep(0x6e84d0)
	/home/rogpeppe/go/src/runtime/lock_futex.go:159 +0x87
runtime.mPark()
	/home/rogpeppe/go/src/runtime/proc.go:1432 +0x2a
runtime.stopm()
	/home/rogpeppe/go/src/runtime/proc.go:2402 +0x78
runtime.findrunnable()
	/home/rogpeppe/go/src/runtime/proc.go:2978 +0x865
runtime.schedule()
	/home/rogpeppe/go/src/runtime/proc.go:3361 +0x239
runtime.park_m(0xc000182820?)
	/home/rogpeppe/go/src/runtime/proc.go:3510 +0x14d
runtime.mcall()
	/home/rogpeppe/go/src/runtime/asm_amd64.s:433 +0x43

goroutine 1 [chan receive, 6 minutes]:
main.main()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:225 +0xd5d

goroutine 10 [chan receive, 6 minutes]:
main.main.func5()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:117 +0xd4
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:116 +0x6af

goroutine 21 [chan send]:
9fans.net/go/draw.mouseproc(0x0?, 0xc000144000, 0x0?, 0x0?)
	/home/rogpeppe/other/9fans/draw/mouse.go:63 +0x5c
created by 9fans.net/go/draw.(*Display).InitMouse
	/home/rogpeppe/other/9fans/draw/mouse.go:49 +0x12e

goroutine 22 [IO wait]:
internal/poll.runtime_pollWait(0x7f7f78201558, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0000783c0?, 0xc000146ddc?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000783c0, {0xc000146ddc, 0x4, 0x4})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc0000100d8, {0xc000146ddc?, 0xc0001adaf0?, 0x44a972?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.ReadAtLeast({0x5ede40, 0xc0000100d8}, {0xc000146ddc, 0x4, 0x4}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/draw/drawfcall.ReadMsg({0x5ede40, 0xc0000100d8})
	/home/rogpeppe/other/9fans/draw/drawfcall/msg.go:232 +0x59
9fans.net/go/draw/drawfcall.(*Conn).RPC(0xc00007a1e0, 0xc0001add28, 0xc00022fb00)
	/home/rogpeppe/other/9fans/draw/drawfcall/mux.go:93 +0x425
9fans.net/go/draw/drawfcall.(*Conn).ReadKbd(0x0?)
	/home/rogpeppe/other/9fans/draw/drawfcall/mux.go:156 +0x7c
9fans.net/go/draw.kbdproc(0xc000144000, 0x0?)
	/home/rogpeppe/other/9fans/draw/keyboard.go:43 +0x48
created by 9fans.net/go/draw.(*Display).InitKeyboard
	/home/rogpeppe/other/9fans/draw/keyboard.go:37 +0x8a

goroutine 23 [IO wait, 3 minutes]:
internal/poll.runtime_pollWait(0x7f7f782011b8, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc000218080?, 0xc0000ee200?, 0x0)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000218080, {0xc0000ee200, 0x4, 0x80})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000218080, {0xc0000ee200?, 0x100c0001a9aa8?, 0x7f7fa0ecc968?})
	/home/rogpeppe/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00021a000, {0xc0000ee200?, 0xc0001a9b28?, 0x44a972?})
	/home/rogpeppe/go/src/net/net.go:183 +0x45
io.ReadAtLeast({0x5edde0, 0xc00021a000}, {0xc0000ee200, 0x4, 0x80}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/plan9.ReadFcall({0x5edde0, 0xc00021a000})
	/home/rogpeppe/other/9fans/plan9/fcall.go:421 +0x5b
9fans.net/go/plan9/client.(*conn).read(0xc000122000)
	/home/rogpeppe/other/9fans/plan9/client/conn.go:211 +0x51
9fans.net/go/plan9/client.(*conn).rpc(0xc000122000, 0xc0001a9ca0, 0x0)
	/home/rogpeppe/other/9fans/plan9/client/conn.go:271 +0x2b8
9fans.net/go/plan9/client.(*Fid).readAt(0xc00021c0c0, {0xc000214000, 0x1000, 0x8?}, 0xffffffffffffffff)
	/home/rogpeppe/other/9fans/plan9/client/fid.go:190 +0x19e
9fans.net/go/plan9/client.(*Fid).Read(0x3?, {0xc000214000?, 0xc0001a9e30?, 0x4370a0?})
	/home/rogpeppe/other/9fans/plan9/client/fid.go:155 +0x25
bufio.(*Reader).fill(0xc000284900)
	/home/rogpeppe/go/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadByte(0xc000284900)
	/home/rogpeppe/go/src/bufio/bufio.go:262 +0x2c
9fans.net/go/plumb.(*reader).readLine(0xc0001a9ef0)
	/home/rogpeppe/other/9fans/plumb/plumb.go:144 +0x56
9fans.net/go/plumb.(*Message).Recv(0xc0000db6e0, {0x5edbe0, 0xc000284900})
	/home/rogpeppe/other/9fans/plumb/plumb.go:109 +0x98
main.plumbthread()
	/home/rogpeppe/other/9fans/cmd/acme/look1.go:68 +0x327
created by main.startplumbing
	/home/rogpeppe/other/9fans/cmd/acme/look1.go:93 +0x25

goroutine 24 [IO wait]:
internal/poll.runtime_pollWait(0x7f7f78201470, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0000a6840?, 0xc00024d100?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000a6840, {0xc00024d100, 0x4, 0x80})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc0000b4008, {0xc00024d100?, 0xc000171ca0?, 0x44a972?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
io.ReadAtLeast({0x5ede40, 0xc0000b4008}, {0xc00024d100, 0x4, 0x80}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/plan9.ReadFcall({0x5ede40, 0xc0000b4008})
	/home/rogpeppe/other/9fans/plan9/fcall.go:421 +0x5b
main.fsysproc()
	/home/rogpeppe/other/9fans/cmd/acme/fsys1.go:136 +0x7c
created by main.fsysinit
	/home/rogpeppe/other/9fans/cmd/acme/fsys1.go:126 +0x39c

goroutine 28 [IO wait, 6 minutes]:
internal/poll.runtime_pollWait(0x7f7f78201728, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0000a7560?, 0xc000305fb8?, 0x1)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000a7560, {0xc000305fb8, 0x2000, 0x2000})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
	/home/rogpeppe/go/src/os/file_posix.go:31
os.(*File).Read(0xc0000b4050, {0xc000305fb8?, 0x0?, 0x0?})
	/home/rogpeppe/go/src/os/file.go:119 +0x5e
main.acmeerrorproc()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:321 +0xaf
created by main.acmeerrorinit
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:338 +0x9e

goroutine 29 [select]:
main.keyboardthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:369 +0x105
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:218 +0xcf8

goroutine 30 [select]:
9fans.net/go/cmd/acme/internal/sync.(*Mutex).Lock(0x6e7320)
	/home/rogpeppe/other/9fans/cmd/acme/internal/sync/mutex.go:42 +0x152
main.bigLock()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:785 +0x25
9fans.net/go/cmd/acme/internal/ui.Textselect(0xc000017358)
	/home/rogpeppe/other/9fans/cmd/acme/internal/ui/text.go:480 +0x562
main.mousethread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:553 +0x978
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:219 +0xd05

goroutine 31 [runnable]:
main.waitthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:608 +0x19a
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:220 +0xd11

goroutine 32 [select]:
main.xfidallocthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:717 +0x79
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:221 +0xd1d

goroutine 33 [chan receive, 6 minutes]:
main.newwindowthread()
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:742 +0x26
created by main.main
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:222 +0xd29

goroutine 50 [chan receive]:
main.xfidctl(0xc0000df200)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 39 [chan receive]:
main.xfidctl(0xc000012780)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 11 [chan receive]:
main.xfidctl(0xc0000de000)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:69 +0x37
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

goroutine 38 [IO wait]:
internal/poll.runtime_pollWait(0x7f7f782010d0, 0x72)
	/home/rogpeppe/go/src/runtime/netpoll.go:233 +0x89
internal/poll.(*pollDesc).wait(0xc0000a0900?, 0xc000161880?, 0x0)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/home/rogpeppe/go/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000a0900, {0xc000161880, 0x4, 0x80})
	/home/rogpeppe/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0000a0900, {0xc000161880?, 0x100c00016fc80?, 0x7f7f78135468?})
	/home/rogpeppe/go/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00021a028, {0xc000161880?, 0xc00016fd00?, 0x44a972?})
	/home/rogpeppe/go/src/net/net.go:183 +0x45
io.ReadAtLeast({0x5edde0, 0xc00021a028}, {0xc000161880, 0x4, 0x80}, 0x4)
	/home/rogpeppe/go/src/io/io.go:331 +0x9a
io.ReadFull(...)
	/home/rogpeppe/go/src/io/io.go:350
9fans.net/go/plan9.ReadFcall({0x5edde0, 0xc00021a028})
	/home/rogpeppe/other/9fans/plan9/fcall.go:421 +0x5b
9fans.net/go/plan9/client.(*conn).read(0xc0001220e0)
	/home/rogpeppe/other/9fans/plan9/client/conn.go:211 +0x51
9fans.net/go/plan9/client.(*conn).rpc(0xc0001220e0, 0xc00016fe48, 0xc00021c150)
	/home/rogpeppe/other/9fans/plan9/client/conn.go:271 +0x2b8
9fans.net/go/plan9/client.(*Fid).Close(0xc00021c150)
	/home/rogpeppe/other/9fans/plan9/client/fid.go:46 +0x95
9fans.net/go/cmd/acme/internal/exec.fsopenfd.func2()
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1144 +0x65
created by 9fans.net/go/cmd/acme/internal/exec.fsopenfd
	/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:1141 +0x118

goroutine 51 [select]:
9fans.net/go/cmd/acme/internal/sync.(*Mutex).Lock(0xc000017100)
	/home/rogpeppe/other/9fans/cmd/acme/internal/sync/mutex.go:42 +0x152
9fans.net/go/cmd/acme/internal/wind.Winlock1(...)
	/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:308
9fans.net/go/cmd/acme/internal/wind.Winlock(0x6e7320?, 0x46)
	/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:302 +0x4f
main.xfideventread(0xc0000ac040, 0xc000017100)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:1013 +0x131
main.xfidread(0xc0000ac040)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:331 +0x57f
main.xfidctl(0xc0000ac040)
	/home/rogpeppe/other/9fans/cmd/acme/xfid.go:71 +0x5d
created by main.xfidallocthread
	/home/rogpeppe/other/9fans/cmd/acme/acme.go:726 +0x176

@rogpeppe
Copy link
Collaborator Author

Looks like the issue is that there's an ordering requirement that the window lock should be "inside" biglock, but because TextSelect drops bigLock before reading from the mouse, xfideventread manages to acquire bigLock but then can't acquire the window lock because TextSelect still has it.

Seems like this is a potential problem anywhere we bigUnlock while holding some other lock.
I'll try getting Textselect to drop the window lock before calling bigUnlock, but it's quite possible that might
mess up some invariants.

@rogpeppe
Copy link
Collaborator Author

I'm reverting 6faf3d8 in my copy for the time being because it's not easy to drop the window lock from inside Textselect.

@rogpeppe
Copy link
Collaborator Author

rogpeppe commented Nov 18, 2021

Here's another one - it's not OK for xfidlog to drop the bigLock while the winlock is held.

acme: goroutine 39
	probable deadlock acquiring mutex ""
	originally acquired by goroutine 40
	callers:
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:308: 9fans.net/go/cmd/acme/internal/wind.Winlock1
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:302: 9fans.net/go/cmd/acme/internal/wind.Winlock
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:542: main.mousethread
		/home/rogpeppe/go/src/runtime/asm_amd64.s:1579: runtime.goexit
	
	goroutine 39 [select]:
	9fans.net/go/cmd/acme/internal/sync.(*Mutex).Lock(0xc0002c6700)
		/home/rogpeppe/other/9fans/cmd/acme/internal/sync/mutex.go:42 +0x152
	9fans.net/go/cmd/acme/internal/wind.Winlock1(...)
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:308
	9fans.net/go/cmd/acme/internal/wind.Winlock(0x6e7320?, 0x4b)
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:302 +0x4f
	main.keyboardthread()
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:374 +0x151
	created by main.main
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:216 +0xcd1
acme: goroutine 40
	probable deadlock acquiring mutex "bigLock"
	originally acquired by goroutine 39
	callers:
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:783: main.bigLock
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:369: main.keyboardthread
		/home/rogpeppe/go/src/runtime/asm_amd64.s:1579: runtime.goexit
	
	goroutine 40 [select]:
	9fans.net/go/cmd/acme/internal/sync.(*Mutex).Lock(0x6e7320)
		/home/rogpeppe/other/9fans/cmd/acme/internal/sync/mutex.go:42 +0x152
	main.bigLock(...)
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:783
	main.xfidlog(0xc0002c6e00, {0x5b127a, 0x3})
		/home/rogpeppe/other/9fans/cmd/acme/logf.go:146 +0x7f
	main.main.func7(0xc0002c6e70?)
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:143 +0x25
	9fans.net/go/cmd/acme/internal/ui.Openfile(0xc0002c6770?, 0xc000237e10)
		/home/rogpeppe/other/9fans/cmd/acme/internal/ui/look.go:611 +0x51b
	9fans.net/go/cmd/acme/internal/ui.Look3(0xc0002c6770, 0x6a, 0x6a, 0x0)
		/home/rogpeppe/other/9fans/cmd/acme/internal/ui/look.go:151 +0x9b3
	main.mousethread()
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:572 +0x8d3
	created by main.main
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:217 +0xcdd

@rogpeppe
Copy link
Collaborator Author

Another one, very similar, but different entry point into xfidlog. I'll stop posting traces now unless I find one that's significantly different.

acme: goroutine 7
	probable deadlock acquiring mutex ""
	originally acquired by goroutine 8
	callers:
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:308: 9fans.net/go/cmd/acme/internal/wind.Winlock1
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:302: 9fans.net/go/cmd/acme/internal/wind.Winlock
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:542: main.mousethread
		/home/rogpeppe/go/src/runtime/asm_amd64.s:1579: runtime.goexit

	goroutine 7 [select]:
	9fans.net/go/cmd/acme/internal/sync.(*Mutex).Lock(0xc0000a8700)
		/home/rogpeppe/other/9fans/cmd/acme/internal/sync/mutex.go:42 +0x152
	9fans.net/go/cmd/acme/internal/wind.Winlock1(...)
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:308
	9fans.net/go/cmd/acme/internal/wind.Winlock(0x6e7320?, 0x4b)
		/home/rogpeppe/other/9fans/cmd/acme/internal/wind/wind.go:302 +0x4f
	main.keyboardthread()
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:374 +0x151
	created by main.main
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:216 +0xcd1

acme: goroutine 8
	probable deadlock acquiring mutex "bigLock"
	originally acquired by goroutine 7
	callers:
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:783: main.bigLock
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:369: main.keyboardthread
		/home/rogpeppe/go/src/runtime/asm_amd64.s:1579: runtime.goexit

	goroutine 8 [select]:
	9fans.net/go/cmd/acme/internal/sync.(*Mutex).Lock(0x6e7320)
		/home/rogpeppe/other/9fans/cmd/acme/internal/sync/mutex.go:42 +0x152
	main.bigLock(...)
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:783
	main.xfidlog(0xc0000a8700, {0x5b1262, 0x3})
		/home/rogpeppe/other/9fans/cmd/acme/logf.go:146 +0x7f
	9fans.net/go/cmd/acme/internal/exec.Get(0xc0000a8770?, 0x63?, 0xc0001f2a00?, 0x3?, 0x0?, {0xc0001f2a08?, 0x0?, 0x0?})
		/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:459 +0x614
	9fans.net/go/cmd/acme/internal/exec.Execute(0xc0000a8770, 0x66, 0x66, 0x0, 0x3?)
		/home/rogpeppe/other/9fans/cmd/acme/internal/exec/exec.go:221 +0xbce
	main.mousethread()
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:567 +0x95b
	created by main.main
		/home/rogpeppe/other/9fans/cmd/acme/acme.go:217 +0xcdd

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

No branches or pull requests

1 participant