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

dexc-desktop: prepare installable desktop app #1957

Merged
merged 4 commits into from
May 9, 2023

Conversation

buck54321
Copy link
Member

@buck54321 buck54321 commented Nov 12, 2022

Introduce a new cmd, dexc-desktop. This coordinates a WebView
window with our normal dexc stack.

Move some common utilities to a new package client/app.

Prepare Debian archive for installation, including control files, Desktop Entry specificiation and icons. User can install with their preferred package manager. Debian packaging moved to separate branch.

@chappjc
Copy link
Member

chappjc commented Nov 12, 2022

Cool. One of the reasons I had closed the PoC webview PR (#1452) was because webview had appeared to be dead with about a year of no commits, but it seems to have been brought back to life earlier this year. We should request a stable release tag if we wanna commit to it as a framework for a dex desktop app.

Copy link
Member

@chappjc chappjc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I'm glad webview is getting regular maintenance and you made the effort to properly productize with it!
Will definitely review asap, just a few comments from a quick scan.

client/cmd/dexc-desktop/go.mod Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/main.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/main.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/syncserver.go Outdated Show resolved Hide resolved
@buck54321
Copy link
Member Author

Cool. One of the reasons I had closed the PoC webview PR (#1452) was because webview had appeared to be dead with about a year of no commits, but it seems to have been brought back to life earlier this year. We should request a stable release tag if we wanna commit to it as a framework for a dex desktop app.

I'm not commited to WebView at all. Honestly, if I didn't have anyone to answer to, I would just include a chromium binary with the distro and run it with exec. That would allow me to open multiple windows at least. Not sure if you can make app mode work with with tabs. But WebView has its benefits too. Small size. Portable dexc binary.

@chappjc
Copy link
Member

chappjc commented Nov 12, 2022

Honestly, if I didn't have anyone to answer to, I would just include a chromium binary with the distro and run it with exec.

If licensing permits, I wouldn't object to that given we can sandbox the thing so it doesn't fiddle with the user's chromium settings.

@chappjc
Copy link
Member

chappjc commented Nov 15, 2022

Honestly, if I didn't have anyone to answer to, I would just include a chromium binary with the distro and run it with exec.

If licensing permits, I wouldn't object to that given we can sandbox the thing so it doesn't fiddle with the user's chromium settings.

I'm pretty sure we'd have to have the app behave like a "downloader" to fetch the browser because third party binaries with ours is what would be problematic in terms of licensing.

@buck54321 buck54321 force-pushed the desktop-app branch 2 times, most recently from 12a618e to b2473d0 Compare November 20, 2022 16:02
@buck54321
Copy link
Member Author

Still Webview, just a separate process for windows.

Copy link
Member

@JoeGruffins JoeGruffins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The webview is working great for me.

There is no build dir the first time you run the build script.

+ DESKTOPICON_BUILDPATH=./build/dexc_0.6.0-pre-0_amd64/usr/share/pixmaps/dexc.png
+ rm -r ./build
rm: cannot remove './build': No such file or directory

client/app/config.go Show resolved Hide resolved
Comment on lines 68 to 82
if resp.StatusCode == http.StatusOK {
log.Errorf("Unexpected response code from kill signal send: %d (%s)", resp.StatusCode, http.StatusText(resp.StatusCode))
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be !=?

case s.openC <- struct{}{}:
log.Info("Window reopened")
default:
log.Infof("Ignored a window reopen request from another instance")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Nothing to format, here and in a few more places.

Copy link
Member

@chappjc chappjc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When this goes in we can squash with you as author. After squash, git commit --amend --author="buck54321 <buck54321@gmail.com>", and ideally tweaked commit message like

add cmd/dexc-desktop

Introduce a new cmd, dexc-desktop. This coordinates a WebView
window with our normal dexc stack.

Prepare Debian archive for installation, including control files,
Desktop Entry specificiation and icons. User can install with
their preferred package manager.

Moves some common utilities to a new package client/app.

Co-authored-by: Jonathan Chappelow <chappjc@gmail.com>

The pkg-debian.sh addition would ideally be a second commit since dexc-desktop is mostly unrelated to Debian.

client/app/version.go Outdated Show resolved Hide resolved
client/app/config.go Outdated Show resolved Hide resolved
client/cmd/dexc/main.go Show resolved Hide resolved
client/cmd/dexc-desktop/syncserver.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/syncserver.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/fileurl.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/main.go Show resolved Hide resolved
m.Unlock()
defer closeWindow(windowID)

cmd.Run()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check and log please

Comment on lines 533 to 512
// TODO: Enable toggling automatic startup on boot. This would be part of a
// larger effort aimed at securing refunds through system restarts.
// https://github.com/decred/dcrdex/pull/1957#discussion_r1020780014
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems firmly in the realm of user/os setup. At best an installer. Do you mean this app itself that is running dex core would make changes the the user/os env to make auto-startup?
My view is that users start programs that they want to run. We can facilitate system service setup with scripts, systemd configs, installer, etc., but I don't think this app code should be concerned with that.

client/cmd/dexc-desktop/main.go Show resolved Hide resolved
@chappjc chappjc added this to the 1.0 milestone Jan 11, 2023
@buck54321 buck54321 changed the title dexc-desktop: package desktop version for Debian dexc-desktop: prepare installable desktop app Apr 17, 2023
client/cmd/dexc/config.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/go.mod Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/go.mod Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/main.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/main.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/main.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/syncserver.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/syncserver.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/syncserver.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/syncserver.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/main.go Outdated Show resolved Hide resolved
client/app/version.go Outdated Show resolved Hide resolved
client/cmd/dexc/config.go Outdated Show resolved Hide resolved
client/cmd/dexc/config.go Outdated Show resolved Hide resolved
client/cmd/dexc-desktop/config.go Show resolved Hide resolved
client/cmd/dexc/main_tray.go Outdated Show resolved Hide resolved
client/cmd/dexc/main.go Outdated Show resolved Hide resolved
client/cmd/dexc/main_notray.go Show resolved Hide resolved
client/webserver/site/src/js/charts.ts Show resolved Hide resolved
run_tests.sh Show resolved Hide resolved
@buck54321 buck54321 force-pushed the desktop-app branch 3 times, most recently from 06a8919 to dfdfd39 Compare April 22, 2023 03:04
@ukane-philemon
Copy link
Contributor

ukane-philemon commented Apr 28, 2023

Ran the dexc-desktop on my Mac and hit this panic immediately.

Panic logs

2023-04-28 17:48:26.010 dexc-desktop[2980:24837] *** Assertion failure in +[NSUndoManager _endTopLevelGroupings], /AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1678.104/Foundation/Misc.subproj/NSUndoManager.m:363
2023-04-28 17:48:26.015 dexc-desktop[2980:24837] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.'
*** First throw call stack:
(
        0   CoreFoundation                      0x00007fff38f88a17 __exceptionPreprocess + 250
        1   libobjc.A.dylib                     0x00007fff7190da9e objc_exception_throw + 48
        2   CoreFoundation                      0x00007fff38fb1d40 +[NSException raise:format:arguments:] + 88
        3   Foundation                          0x00007fff3b6cb91d -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 191
        4   Foundation                          0x00007fff3b60806e +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 440
        5   AppKit                              0x00007fff3615f9ec -[NSApplication run] + 864
        6   dexc-desktop                        0x0000000101247a16 nativeLoop + 54
        7   dexc-desktop                        0x0000000101246b8a _cgo_23abc066fe6a_Cfunc_nativeLoop + 26
        8   dexc-desktop                        0x0000000100073c04 runtime.asmcgocall.abi0 + 100
)
libc++abi.dylib: terminating with uncaught exception of type NSException
SIGABRT: abort
PC=0x7fff72bf532a m=12 sigcode=0
signal arrived during cgo execution

goroutine 103 [syscall]:
runtime.cgocall(0x101246b70, 0xc0004ae738)
        /usr/local/go/src/runtime/cgocall.go:157 +0x5c fp=0xc0004ae710 sp=0xc0004ae6d8 pc=0x10000855c
fyne.io/systray._Cfunc_nativeLoop()
        _cgo_gotypes.go:140 +0x48 fp=0xc0004ae738 sp=0xc0004ae710 pc=0x10123d188
fyne.io/systray.nativeLoop(...)
        /Users/philemon/go/pkg/mod/fyne.io/systray@v1.10.1-0.20230403195833-7dc3c09283d6/systray_darwin.go:48
fyne.io/systray.Run(0x0?, 0x0?)
        /Users/philemon/go/pkg/mod/fyne.io/systray@v1.10.1-0.20230403195833-7dc3c09283d6/systray.go:85 +0x4b fp=0xc0004ae768 sp=0xc0004ae738 pc=0x10123c80b
main.mainCore.func8()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:303 +0x158 fp=0xc0004ae7e0 sp=0xc0004ae768 pc=0x101244138
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004ae7e8 sp=0xc0004ae7e0 pc=0x100073f21
created by main.mainCore
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:301 +0x117d

goroutine 1 [select, locked to thread]:
runtime.gopark(0xc0008d3ea0?, 0x3?, 0xd2?, 0xf6?, 0xc0008d3b92?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0008d39e8 sp=0xc0008d39c8 pc=0x10003f356
runtime.selectgo(0xc0008d3ea0, 0xc0008d3b8c, 0x3?, 0x0, 0x100010100?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc0008d3b28 sp=0xc0008d39e8 pc=0x10004f4fe
main.mainCore()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:323 +0x141a fp=0xc0008d3f38 sp=0xc0008d3b28 pc=0x101243bda
main.main()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:140 +0x19 fp=0xc0008d3f80 sp=0xc0008d3f38 pc=0x101242759
runtime.main()
        /usr/local/go/src/runtime/proc.go:250 +0x207 fp=0xc0008d3fe0 sp=0xc0008d3f80 pc=0x10003ef27
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0008d3fe8 sp=0xc0008d3fe0 pc=0x100073f21

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007afb0 sp=0xc00007af90 pc=0x10003f356
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.forcegchelper()
        /usr/local/go/src/runtime/proc.go:305 +0xb0 fp=0xc00007afe0 sp=0xc00007afb0 pc=0x10003f190
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007afe8 sp=0xc00007afe0 pc=0x100073f21
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=0xc00007b780 sp=0xc00007b760 pc=0x10003f356
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.bgsweep(0x0?)
        /usr/local/go/src/runtime/mgcsweep.go:319 +0xde fp=0xc00007b7c8 sp=0xc00007b780 pc=0x100029dde
runtime.gcenable.func1()
        /usr/local/go/src/runtime/mgc.go:178 +0x26 fp=0xc00007b7e0 sp=0xc00007b7c8 pc=0x10001f026
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007b7e8 sp=0xc00007b7e0 pc=0x100073f21
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:178 +0x6b

goroutine 4 [sleep]:
runtime.gopark(0xc0000ac000?, 0xc321dbd273?, 0x0?, 0x0?, 0x102000d70?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007bf30 sp=0xc00007bf10 pc=0x10003f356
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.(*scavengerState).sleep(0x102e0dba0, 0x40f80bb000000000)
        /usr/local/go/src/runtime/mgcscavenge.go:479 +0x12a fp=0xc00007bfa0 sp=0xc00007bf30 pc=0x100027eaa
runtime.bgscavenge(0x0?)
        /usr/local/go/src/runtime/mgcscavenge.go:637 +0x7f fp=0xc00007bfc8 sp=0xc00007bfa0 pc=0x10002829f
runtime.gcenable.func2()
        /usr/local/go/src/runtime/mgc.go:179 +0x26 fp=0xc00007bfe0 sp=0xc00007bfc8 pc=0x10001efc6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007bfe8 sp=0xc00007bfe0 pc=0x100073f21
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:179 +0xaa

goroutine 5 [finalizer wait]:
runtime.gopark(0x1a0?, 0x102e0ee80?, 0x60?, 0x78?, 0xc00007a770?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007a628 sp=0xc00007a608 pc=0x10003f356
runtime.runfinq()
        /usr/local/go/src/runtime/mfinal.go:193 +0x107 fp=0xc00007a7e0 sp=0xc00007a628 pc=0x10001e067
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007a7e8 sp=0xc00007a7e0 pc=0x100073f21
created by runtime.createfing
        /usr/local/go/src/runtime/mfinal.go:163 +0x45

goroutine 34 [chan receive]:
runtime.gopark(0xc00007c790?, 0xc00007c708?, 0x3?, 0x0?, 0x10000c00007c750?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007c6b0 sp=0xc00007c690 pc=0x10003f356
runtime.chanrecv(0xc0003de060, 0xc00007c7b0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc00007c740 sp=0xc00007c6b0 pc=0x10000b2fd
runtime.chanrecv2(0xc00007c7a8?, 0x10000ad39?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc00007c768 sp=0xc00007c740 pc=0x10000ae38
github.com/ethereum/go-ethereum/core.(*txSenderCacher).cache(0xc000134000?)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:63 +0x3b fp=0xc00007c7c8 sp=0xc00007c768 pc=0x100af111b
github.com/ethereum/go-ethereum/core.newTxSenderCacher.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x26 fp=0xc00007c7e0 sp=0xc00007c7c8 pc=0x100af10a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007c7e8 sp=0xc00007c7e0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/core.newTxSenderCacher
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x75

goroutine 35 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000766b0 sp=0xc000076690 pc=0x10003f356
runtime.chanrecv(0xc0003de060, 0xc0000767b0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000076740 sp=0xc0000766b0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000076768 sp=0xc000076740 pc=0x10000ae38
github.com/ethereum/go-ethereum/core.(*txSenderCacher).cache(0x0?)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:63 +0x3b fp=0xc0000767c8 sp=0xc000076768 pc=0x100af111b
github.com/ethereum/go-ethereum/core.newTxSenderCacher.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x26 fp=0xc0000767e0 sp=0xc0000767c8 pc=0x100af10a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000767e8 sp=0xc0000767e0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/core.newTxSenderCacher
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x75

goroutine 36 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000076eb0 sp=0xc000076e90 pc=0x10003f356
runtime.chanrecv(0xc0003de060, 0xc000076fb0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000076f40 sp=0xc000076eb0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000076f68 sp=0xc000076f40 pc=0x10000ae38
github.com/ethereum/go-ethereum/core.(*txSenderCacher).cache(0x0?)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:63 +0x3b fp=0xc000076fc8 sp=0xc000076f68 pc=0x100af111b
github.com/ethereum/go-ethereum/core.newTxSenderCacher.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x26 fp=0xc000076fe0 sp=0xc000076fc8 pc=0x100af10a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000076fe8 sp=0xc000076fe0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/core.newTxSenderCacher
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x75

goroutine 37 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000776b0 sp=0xc000077690 pc=0x10003f356
runtime.chanrecv(0xc0003de060, 0xc0000777b0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000077740 sp=0xc0000776b0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000077768 sp=0xc000077740 pc=0x10000ae38
github.com/ethereum/go-ethereum/core.(*txSenderCacher).cache(0x0?)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:63 +0x3b fp=0xc0000777c8 sp=0xc000077768 pc=0x100af111b
github.com/ethereum/go-ethereum/core.newTxSenderCacher.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x26 fp=0xc0000777e0 sp=0xc0000777c8 pc=0x100af10a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000777e8 sp=0xc0000777e0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/core.newTxSenderCacher
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x75

goroutine 38 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000077eb0 sp=0xc000077e90 pc=0x10003f356
runtime.chanrecv(0xc0003de060, 0xc000077fb0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000077f40 sp=0xc000077eb0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000077f68 sp=0xc000077f40 pc=0x10000ae38
github.com/ethereum/go-ethereum/core.(*txSenderCacher).cache(0x0?)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:63 +0x3b fp=0xc000077fc8 sp=0xc000077f68 pc=0x100af111b
github.com/ethereum/go-ethereum/core.newTxSenderCacher.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x26 fp=0xc000077fe0 sp=0xc000077fc8 pc=0x100af10a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000077fe8 sp=0xc000077fe0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/core.newTxSenderCacher
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x75

goroutine 39 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000786b0 sp=0xc000078690 pc=0x10003f356
runtime.chanrecv(0xc0003de060, 0xc0000787b0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000078740 sp=0xc0000786b0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000078768 sp=0xc000078740 pc=0x10000ae38
github.com/ethereum/go-ethereum/core.(*txSenderCacher).cache(0x0?)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:63 +0x3b fp=0xc0000787c8 sp=0xc000078768 pc=0x100af111b
github.com/ethereum/go-ethereum/core.newTxSenderCacher.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x26 fp=0xc0000787e0 sp=0xc0000787c8 pc=0x100af10a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000787e8 sp=0xc0000787e0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/core.newTxSenderCacher
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x75

goroutine 40 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000078eb0 sp=0xc000078e90 pc=0x10003f356
runtime.chanrecv(0xc0003de060, 0xc000078fb0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000078f40 sp=0xc000078eb0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000078f68 sp=0xc000078f40 pc=0x10000ae38
github.com/ethereum/go-ethereum/core.(*txSenderCacher).cache(0x0?)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:63 +0x3b fp=0xc000078fc8 sp=0xc000078f68 pc=0x100af111b
github.com/ethereum/go-ethereum/core.newTxSenderCacher.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x26 fp=0xc000078fe0 sp=0xc000078fc8 pc=0x100af10a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000078fe8 sp=0xc000078fe0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/core.newTxSenderCacher
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x75

goroutine 41 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000796b0 sp=0xc000079690 pc=0x10003f356
runtime.chanrecv(0xc0003de060, 0xc0000797b0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000079740 sp=0xc0000796b0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000079768 sp=0xc000079740 pc=0x10000ae38
github.com/ethereum/go-ethereum/core.(*txSenderCacher).cache(0x0?)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:63 +0x3b fp=0xc0000797c8 sp=0xc000079768 pc=0x100af111b
github.com/ethereum/go-ethereum/core.newTxSenderCacher.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x26 fp=0xc0000797e0 sp=0xc0000797c8 pc=0x100af10a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000797e8 sp=0xc0000797e0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/core.newTxSenderCacher
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/core/sender_cacher.go:55 +0x75

goroutine 42 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000079ed0 sp=0xc000079eb0 pc=0x10003f356
runtime.chanrecv(0xc0000a3020, 0xc000079fa0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000079f60 sp=0xc000079ed0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000079f88 sp=0xc000079f60 pc=0x10000ae38
github.com/ethereum/go-ethereum/metrics.(*meterArbiter).tick(0x102e0c580)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/metrics/meter.go:290 +0x65 fp=0xc000079fc8 sp=0xc000079f88 pc=0x10071dd05
github.com/ethereum/go-ethereum/metrics.NewMeterForced.func2()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/metrics/meter.go:71 +0x26 fp=0xc000079fe0 sp=0xc000079fc8 pc=0x10071cbe6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000079fe8 sp=0xc000079fe0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/metrics.NewMeterForced
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/metrics/meter.go:71 +0xc5

goroutine 43 [select]:
runtime.gopark(0xc000088f38?, 0x7?, 0x1?, 0x0?, 0xc000088caa?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000088af0 sp=0xc000088ad0 pc=0x10003f356
runtime.selectgo(0xc000088f38, 0xc000088c9c, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc000088c30 sp=0xc000088af0 pc=0x10004f4fe
github.com/ethereum/go-ethereum/consensus/ethash.(*remoteSealer).loop(0xc00046ac30)
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/consensus/ethash/sealer.go:279 +0x205 fp=0xc000088fc8 sp=0xc000088c30 pc=0x100b732a5
github.com/ethereum/go-ethereum/consensus/ethash.startRemoteSealer.func1()
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/consensus/ethash/sealer.go:263 +0x26 fp=0xc000088fe0 sp=0xc000088fc8 pc=0x100b73066
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000088fe8 sp=0xc000088fe0 pc=0x100073f21
created by github.com/ethereum/go-ethereum/consensus/ethash.startRemoteSealer
        /Users/philemon/go/pkg/mod/github.com/ethereum/go-ethereum@v1.11.5/consensus/ethash/sealer.go:263 +0x319

goroutine 44 [GC worker (idle)]:
runtime.gopark(0xc2bc2385a5?, 0x3?, 0x23?, 0xa1?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004b0f50 sp=0xc0004b0f30 pc=0x10003f356
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0004b0fe0 sp=0xc0004b0f50 pc=0x100020d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004b0fe8 sp=0xc0004b0fe0 pc=0x100073f21
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 7 [GC worker (idle)]:
runtime.gopark(0xc2bc22005f?, 0x3?, 0x9f?, 0x2?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007cf50 sp=0xc00007cf30 pc=0x10003f356
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc00007cfe0 sp=0xc00007cf50 pc=0x100020d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007cfe8 sp=0xc00007cfe0 pc=0x100073f21
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 8 [GC worker (idle)]:
runtime.gopark(0xc2bc238ba6?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007d750 sp=0xc00007d730 pc=0x10003f356
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc00007d7e0 sp=0xc00007d750 pc=0x100020d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007d7e8 sp=0xc00007d7e0 pc=0x100073f21
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 9 [GC worker (idle)]:
runtime.gopark(0xc2bc21f559?, 0x3?, 0x73?, 0x8a?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00007df50 sp=0xc00007df30 pc=0x10003f356
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc00007dfe0 sp=0xc00007df50 pc=0x100020d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007dfe8 sp=0xc00007dfe0 pc=0x100073f21
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 45 [GC worker (idle)]:
runtime.gopark(0xc2bc227572?, 0x3?, 0xfe?, 0x61?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004b1750 sp=0xc0004b1730 pc=0x10003f356
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0004b17e0 sp=0xc0004b1750 pc=0x100020d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004b17e8 sp=0xc0004b17e0 pc=0x100073f21
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 10 [GC worker (idle)]:
runtime.gopark(0xc2bc220376?, 0x1?, 0xa8?, 0xa5?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004ac750 sp=0xc0004ac730 pc=0x10003f356
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0004ac7e0 sp=0xc0004ac750 pc=0x100020d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004ac7e8 sp=0xc0004ac7e0 pc=0x100073f21
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 46 [GC worker (idle)]:
runtime.gopark(0xc249c48ef5?, 0x3?, 0x18?, 0xcd?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004b1f50 sp=0xc0004b1f30 pc=0x10003f356
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0004b1fe0 sp=0xc0004b1f50 pc=0x100020d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004b1fe8 sp=0xc0004b1fe0 pc=0x100073f21
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 11 [GC worker (idle)]:
runtime.gopark(0x102000e90?, 0xc0001282c0?, 0x1a?, 0x14?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004acf50 sp=0xc0004acf30 pc=0x10003f356
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0004acfe0 sp=0xc0004acf50 pc=0x100020d91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004acfe8 sp=0xc0004acfe0 pc=0x100073f21
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x25

goroutine 12 [select, locked to thread]:
runtime.gopark(0xc0004b37a8?, 0x2?, 0xd2?, 0xf6?, 0xc0004b37a4?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004b3620 sp=0xc0004b3600 pc=0x10003f356
runtime.selectgo(0xc0004b37a8, 0xc0004b37a0, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc0004b3760 sp=0xc0004b3620 pc=0x10004f4fe
runtime.ensureSigM.func1()
        /usr/local/go/src/runtime/signal_unix.go:1000 +0x187 fp=0xc0004b37e0 sp=0xc0004b3760 pc=0x100069d67
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004b37e8 sp=0xc0004b37e0 pc=0x100073f21
created by runtime.ensureSigM
        /usr/local/go/src/runtime/signal_unix.go:983 +0xbd

goroutine 19 [syscall]:
runtime.sigNoteSleep(0x0)
        /usr/local/go/src/runtime/os_darwin.go:123 +0x1e fp=0xc000409fa0 sp=0xc000409f68 pc=0x1000395fe
os/signal.signal_recv()
        /usr/local/go/src/runtime/sigqueue.go:149 +0x28 fp=0xc000409fc0 sp=0xc000409fa0 pc=0x10006fb28
os/signal.loop()
        /usr/local/go/src/os/signal/signal_unix.go:23 +0x19 fp=0xc000409fe0 sp=0xc000409fc0 pc=0x100c5ac59
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000409fe8 sp=0xc000409fe0 pc=0x100073f21
created by os/signal.Notify.func1.1
        /usr/local/go/src/os/signal/signal.go:151 +0x2a

goroutine 20 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00040a6d0 sp=0xc00040a6b0 pc=0x10003f356
runtime.chanrecv(0xc0000a27e0, 0xc00040a7c0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc00040a760 sp=0xc00040a6d0 pc=0x10000b2fd
runtime.chanrecv2(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc00040a788 sp=0xc00040a760 pc=0x10000ae38
main.mainCore.func2()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:227 +0x31 fp=0xc00040a7e0 sp=0xc00040a788 pc=0x101244a91
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00040a7e8 sp=0xc00040a7e0 pc=0x100073f21
created by main.mainCore
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:226 +0x98b

goroutine 21 [semacquire]:
runtime.gopark(0x20?, 0x20?, 0x60?, 0x20?, 0x3?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004e9c20 sp=0xc0004e9c00 pc=0x10003f356
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.semacquire1(0xc00018d218, 0x20?, 0x1, 0x0, 0xf1?)
        /usr/local/go/src/runtime/sema.go:160 +0x20f fp=0xc0004e9c88 sp=0xc0004e9c20 pc=0x1000505ef
sync.runtime_Semacquire(0xc00012ea40?)
        /usr/local/go/src/runtime/sema.go:62 +0x27 fp=0xc0004e9cc0 sp=0xc0004e9c88 pc=0x10006f307
sync.(*WaitGroup).Wait(0xc00018d378?)
        /usr/local/go/src/sync/waitgroup.go:116 +0x4b fp=0xc0004e9ce8 sp=0xc0004e9cc0 pc=0x10009106b
decred.org/dcrdex/client/core.(*Core).Run(0xc00018d200, {0x1021d0030?, 0xc0000ac4b0})
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:1635 +0x67d fp=0xc0004e9f90 sp=0xc0004e9ce8 pc=0x100570d3d
main.mainCore.func3()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:238 +0x6d fp=0xc0004e9fe0 sp=0xc0004e9f90 pc=0x1012449ad
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004e9fe8 sp=0xc0004e9fe0 pc=0x100073f21
created by main.mainCore
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:236 +0xa5b

goroutine 67 [chan receive]:
runtime.gopark(0xc000519d30?, 0x100078205?, 0x30?, 0x9d?, 0x1001144e6?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000519d08 sp=0xc000519ce8 pc=0x10003f356
runtime.chanrecv(0xc000158840, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000519d98 sp=0xc000519d08 pc=0x10000b2fd
runtime.chanrecv1(0xc000136a50?, 0x0?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc000519dc0 sp=0xc000519d98 pc=0x10000adf8
decred.org/dcrdex/client/db/bolt.(*BoltDB).Run(0xc0002e4ca0, {0x1021d0030?, 0xc000136a50?})
        /Users/philemon/Desktop/Decred/dcrdex/client/db/bolt/db.go:230 +0x51 fp=0xc000519f98 sp=0xc000519dc0 pc=0x100425871
decred.org/dcrdex/client/core.(*Core).Run.func1()
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:1589 +0x70 fp=0xc000519fe0 sp=0xc000519f98 pc=0x100571750
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000519fe8 sp=0xc000519fe0 pc=0x100073f21
created by decred.org/dcrdex/client/core.(*Core).Run
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:1587 +0x1be

goroutine 23 [select]:
runtime.gopark(0xc00040af70?, 0x2?, 0x0?, 0x0?, 0xc00040aec4?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00040ad48 sp=0xc00040ad28 pc=0x10003f356
runtime.selectgo(0xc00040af70, 0xc00040aec0, 0xe?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc00040ae88 sp=0xc00040ad48 pc=0x10004f4fe
decred.org/dcrdex/client/core.(*Core).listen(0xc00018d200, 0xc0006829c0)
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:8431 +0x449 fp=0xc00040afc0 sp=0xc00040ae88 pc=0x1005aa049
decred.org/dcrdex/client/core.(*Core).startDexConnection.func2()
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:7765 +0x2a fp=0xc00040afe0 sp=0xc00040afc0 pc=0x1005a5dea
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00040afe8 sp=0xc00040afe0 pc=0x100073f21
created by decred.org/dcrdex/client/core.(*Core).startDexConnection
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:7765 +0xca

goroutine 47 [chan receive]:
runtime.gopark(0x8d12920377ccd5?, 0x1200fbf031fd2ab?, 0x29?, 0xda?, 0x10a25703c1df7a?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000405ed0 sp=0xc000405eb0 pc=0x10003f356
runtime.chanrecv(0xc0003de000, 0xc000405fb0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000405f60 sp=0xc000405ed0 pc=0x10000b2fd
runtime.chanrecv2(0x132e8d0221b02d?, 0xaab5900c70f31?)
        /usr/local/go/src/runtime/chan.go:447 +0x18 fp=0xc000405f88 sp=0xc000405f60 pc=0x10000ae38
decred.org/dcrdex/client/core.(*Core).listen.func2()
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:8326 +0x9d fp=0xc000405fe0 sp=0xc000405f88 pc=0x1005ab35d
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000405fe8 sp=0xc000405fe0 pc=0x100073f21
created by decred.org/dcrdex/client/core.(*Core).listen
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:8324 +0x26a

goroutine 48 [select]:
runtime.gopark(0xc000406798?, 0x3?, 0xc4?, 0xb9?, 0xc00040674a?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004065c0 sp=0xc0004065a0 pc=0x10003f356
runtime.selectgo(0xc000406798, 0xc000406744, 0x4b4dcf018a5a5e?, 0x0, 0x35944a4024adfc8?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc000406700 sp=0xc0004065c0 pc=0x10004f4fe
decred.org/dcrdex/client/core.(*Core).listen.func4()
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:8408 +0x12c fp=0xc0004067e0 sp=0xc000406700 pc=0x1005aa56c
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004067e8 sp=0xc0004067e0 pc=0x100073f21
created by decred.org/dcrdex/client/core.(*Core).listen
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:8405 +0x3d0

goroutine 29 [IO wait]:
runtime.gopark(0xd?, 0xc000718000?, 0x0?, 0x10?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000522638 sp=0xc000522618 pc=0x10003f356
runtime.netpollblock(0x1000c8149?, 0x806f?, 0x1?)
        /usr/local/go/src/runtime/netpoll.go:527 +0xf7 fp=0xc000522670 sp=0xc000522638 pc=0x100038457
internal/poll.runtime_pollWait(0x10ba714b0, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0x89 fp=0xc000522690 sp=0xc000522670 pc=0x10006d549
internal/poll.(*pollDesc).wait(0xc00015e100?, 0xc000718000?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32 fp=0xc0005226b8 sp=0xc000522690 pc=0x1000e6d12
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00015e100, {0xc000718000, 0x1000, 0x1000})
        /usr/local/go/src/internal/poll/fd_unix.go:167 +0x299 fp=0xc000522750 sp=0xc0005226b8 pc=0x1000e80f9
net.(*netFD).Read(0xc00015e100, {0xc000718000?, 0xc0c?, 0xbf0?})
        /usr/local/go/src/net/fd_posix.go:55 +0x29 fp=0xc000522798 sp=0xc000522750 pc=0x100138f69
net.(*conn).Read(0xc000130030, {0xc000718000?, 0x10016d300?, 0xc0000c21b0?})
        /usr/local/go/src/net/net.go:183 +0x45 fp=0xc0005227e0 sp=0xc000522798 pc=0x10014b465
net.(*TCPConn).Read(0xc000522878?, {0xc000718000?, 0xc000706690?, 0x18?})
        <autogenerated>:1 +0x29 fp=0xc000522810 sp=0xc0005227e0 pc=0x10015de49
crypto/tls.(*atLeastReader).Read(0xc000706690, {0xc000718000?, 0xc000706690?, 0x0?})
        /usr/local/go/src/crypto/tls/conn.go:788 +0x3d fp=0xc000522858 sp=0xc000522810 pc=0x10024d8bd
bytes.(*Buffer).ReadFrom(0xc0000c2290, {0x1021c4160, 0xc000706690})
        /usr/local/go/src/bytes/buffer.go:202 +0x98 fp=0xc0005228b0 sp=0xc000522858 pc=0x10016d138
crypto/tls.(*Conn).readFromUntil(0xc0000c2000, {0x10ba715a0?, 0xc000130030}, 0x1000?)
        /usr/local/go/src/crypto/tls/conn.go:810 +0xe5 fp=0xc0005228f0 sp=0xc0005228b0 pc=0x10024daa5
crypto/tls.(*Conn).readRecordOrCCS(0xc0000c2000, 0x0)
        /usr/local/go/src/crypto/tls/conn.go:617 +0x116 fp=0xc000522c50 sp=0xc0005228f0 pc=0x10024af96
crypto/tls.(*Conn).readRecord(...)
        /usr/local/go/src/crypto/tls/conn.go:583
crypto/tls.(*Conn).Read(0xc0000c2000, {0xc00070e000, 0x1000, 0x10137bd06?})
        /usr/local/go/src/crypto/tls/conn.go:1316 +0x16f fp=0xc000522cc0 sp=0xc000522c50 pc=0x100250e8f
bufio.(*Reader).fill(0xc00070c480)
        /usr/local/go/src/bufio/bufio.go:106 +0xff fp=0xc000522cf8 sp=0xc000522cc0 pc=0x10029f0ff
bufio.(*Reader).Peek(0xc00070c480, 0x2)
        /usr/local/go/src/bufio/bufio.go:144 +0x5d fp=0xc000522d18 sp=0xc000522cf8 pc=0x10029f25d
github.com/gorilla/websocket.(*Conn).read(0xc00017e420, 0xc000522de8?)
        /Users/philemon/go/pkg/mod/github.com/gorilla/websocket@v1.5.0/conn.go:371 +0x2c fp=0xc000522d70 sp=0xc000522d18 pc=0x10039024c
github.com/gorilla/websocket.(*Conn).advanceFrame(0xc00017e420)
        /Users/philemon/go/pkg/mod/github.com/gorilla/websocket@v1.5.0/conn.go:809 +0x7b fp=0xc000522e60 sp=0xc000522d70 pc=0x1003924bb
github.com/gorilla/websocket.(*Conn).NextReader(0xc00017e420)
        /Users/philemon/go/pkg/mod/github.com/gorilla/websocket@v1.5.0/conn.go:1009 +0xcc fp=0xc000522ea0 sp=0xc000522e60 pc=0x1003934ac
github.com/gorilla/websocket.(*Conn).ReadJSON(0xc00017c120?, {0x101589600, 0xc000058780})
        /Users/philemon/go/pkg/mod/github.com/gorilla/websocket@v1.5.0/json.go:50 +0x27 fp=0xc000522ee8 sp=0xc000522ea0 pc=0x1003942a7
decred.org/dcrdex/client/comms.(*wsConn).read(0xc00017c120, {0x1021d0030, 0xc000136190})
        /Users/philemon/Desktop/Decred/dcrdex/client/comms/wsconn.go:316 +0xc5 fp=0xc000522f98 sp=0xc000522ee8 pc=0x10039b825
decred.org/dcrdex/client/comms.(*wsConn).connect.func2()
        /Users/philemon/Desktop/Decred/dcrdex/client/comms/wsconn.go:283 +0x66 fp=0xc000522fe0 sp=0xc000522f98 pc=0x10039b3a6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000522fe8 sp=0xc000522fe0 pc=0x100073f21
created by decred.org/dcrdex/client/comms.(*wsConn).connect
        /Users/philemon/Desktop/Decred/dcrdex/client/comms/wsconn.go:281 +0x4bb

goroutine 30 [select]:
runtime.gopark(0xc00040b768?, 0x2?, 0xf8?, 0xb5?, 0xc00040b74c?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00040b5c0 sp=0xc00040b5a0 pc=0x10003f356
runtime.selectgo(0xc00040b768, 0xc00040b748, 0x10000a09d?, 0x0, 0x1021c29f0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc00040b700 sp=0xc00040b5c0 pc=0x10004f4fe
decred.org/dcrdex/client/comms.(*wsConn).keepAlive(0xc00017c120, {0x1021d0030, 0xc000136190})
        /Users/philemon/Desktop/Decred/dcrdex/client/comms/wsconn.go:394 +0xb8 fp=0xc00040b798 sp=0xc00040b700 pc=0x10039c058
decred.org/dcrdex/client/comms.(*wsConn).Connect.func2()
        /Users/philemon/Desktop/Decred/dcrdex/client/comms/wsconn.go:465 +0x66 fp=0xc00040b7e0 sp=0xc00040b798 pc=0x10039cae6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00040b7e8 sp=0xc00040b7e0 pc=0x100073f21
created by decred.org/dcrdex/client/comms.(*wsConn).Connect
        /Users/philemon/Desktop/Decred/dcrdex/client/comms/wsconn.go:463 +0x255

goroutine 51 [chan receive]:
runtime.gopark(0x100071d2e?, 0x1000477f1?, 0x90?, 0x8e?, 0x100047820?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004e8e78 sp=0xc0004e8e58 pc=0x10003f356
runtime.chanrecv(0xc000474120, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc0004e8f08 sp=0xc0004e8e78 pc=0x10000b2fd
runtime.chanrecv1(0xc0004de240?, 0x1021d0030?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc0004e8f30 sp=0xc0004e8f08 pc=0x10000adf8
decred.org/dcrdex/dex.(*ConnectionMaster).Wait(...)
        /Users/philemon/Desktop/Decred/dcrdex/dex/runner.go:190
main.mainCore.func5()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:266 +0x167 fp=0xc0004e8fe0 sp=0xc0004e8f30 pc=0x101244747
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004e8fe8 sp=0xc0004e8fe0 pc=0x100073f21
created by main.mainCore
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:257 +0xc9e

goroutine 31 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004b0640 sp=0xc0004b0620 pc=0x10003f356
runtime.chanrecv(0xc000288180, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc0004b06d0 sp=0xc0004b0640 pc=0x10000b2fd
runtime.chanrecv1(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc0004b06f8 sp=0xc0004b06d0 pc=0x10000adf8
decred.org/dcrdex/client/comms.(*wsConn).Connect.func3()
        /Users/philemon/Desktop/Decred/dcrdex/client/comms/wsconn.go:469 +0x85 fp=0xc0004b07e0 sp=0xc0004b06f8 pc=0x10039c7a5
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004b07e8 sp=0xc0004b07e0 pc=0x100073f21
created by decred.org/dcrdex/client/comms.(*wsConn).Connect
        /Users/philemon/Desktop/Decred/dcrdex/client/comms/wsconn.go:467 +0x2c5

goroutine 32 [semacquire]:
runtime.gopark(0x0?, 0x0?, 0x20?, 0x56?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004b26f0 sp=0xc0004b26d0 pc=0x10003f356
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.semacquire1(0xc00017c138, 0x0?, 0x1, 0x0, 0x0?)
        /usr/local/go/src/runtime/sema.go:160 +0x20f fp=0xc0004b2758 sp=0xc0004b26f0 pc=0x1000505ef
sync.runtime_Semacquire(0x0?)
        /usr/local/go/src/runtime/sema.go:62 +0x27 fp=0xc0004b2790 sp=0xc0004b2758 pc=0x10006f307
sync.(*WaitGroup).Wait(0x0?)
        /usr/local/go/src/sync/waitgroup.go:116 +0x4b fp=0xc0004b27b8 sp=0xc0004b2790 pc=0x10009106b
decred.org/dcrdex/dex.(*ConnectionMaster).Connect.func1()
        /Users/philemon/Desktop/Decred/dcrdex/dex/runner.go:140 +0x2f fp=0xc0004b27e0 sp=0xc0004b27b8 pc=0x10036deef
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004b27e8 sp=0xc0004b27e0 pc=0x100073f21
created by decred.org/dcrdex/dex.(*ConnectionMaster).Connect
        /Users/philemon/Desktop/Decred/dcrdex/dex/runner.go:139 +0x159

goroutine 66 [chan receive]:
runtime.gopark(0xc000523df0?, 0x6fc23ac00?, 0x0?, 0x3b?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000523d88 sp=0xc000523d68 pc=0x10003f356
runtime.chanrecv(0xc0000a29c0, 0xc000523e98, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000523e18 sp=0xc000523d88 pc=0x10000b2fd
runtime.chanrecv1(0xc00017c120?, 0xc00015bc00?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc000523e40 sp=0xc000523e18 pc=0x10000adf8
decred.org/dcrdex/client/core.sendRequest({0x1021d6cf0, 0xc00017c120}, {0x1017a8fc4, 0xa}, {0x0, 0x0}, {0x10141e7a0?, 0xc0000140f0}, 0x1003873a7?)
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:9072 +0x2aa fp=0xc000523ed8 sp=0xc000523e40 pc=0x1005b0f0a
decred.org/dcrdex/client/core.(*dexConnection).subPriceFeed(0xc0006829c0)
        /Users/philemon/Desktop/Decred/dcrdex/client/core/bookie.go:925 +0x7b fp=0xc000523fc8 sp=0xc000523ed8 pc=0x10055783b
decred.org/dcrdex/client/core.(*Core).startDexConnection.func3()
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:7836 +0x26 fp=0xc000523fe0 sp=0xc000523fc8 pc=0x1005a56c6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000523fe8 sp=0xc000523fe0 pc=0x100073f21
created by decred.org/dcrdex/client/core.(*Core).startDexConnection
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:7836 +0x3d5

goroutine 68 [select]:
runtime.gopark(0xc00051a738?, 0x2?, 0x4?, 0x0?, 0xc00051a704?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00051a588 sp=0xc00051a568 pc=0x10003f356
runtime.selectgo(0xc00051a738, 0xc00051a700, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc00051a6c8 sp=0xc00051a588 pc=0x10004f4fe
decred.org/dcrdex/dex/wait.(*TickerQueue).Run(0xc00015bb80, {0x1021d0030, 0xc0000ac4b0})
        /Users/philemon/Desktop/Decred/dcrdex/dex/wait/queue.go:118 +0x17d fp=0xc00051a798 sp=0xc00051a6c8 pc=0x10043b13d
decred.org/dcrdex/client/core.(*Core).Run.func2()
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:1595 +0x6d fp=0xc00051a7e0 sp=0xc00051a798 pc=0x10057164d
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00051a7e8 sp=0xc00051a7e0 pc=0x100073f21
created by decred.org/dcrdex/client/core.(*Core).Run
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:1593 +0x258

goroutine 69 [select]:
runtime.gopark(0xc000524fa0?, 0x2?, 0x68?, 0x90?, 0xc000524f64?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000524de0 sp=0xc000524dc0 pc=0x10003f356
runtime.selectgo(0xc000524fa0, 0xc000524f60, 0xc000136aa0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc000524f20 sp=0xc000524de0 pc=0x10004f4fe
decred.org/dcrdex/client/core.(*Core).fetchFiatExchangeRates.func1()
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:9811 +0x12a fp=0xc000524fe0 sp=0xc000524f20 pc=0x1005b78ea
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000524fe8 sp=0xc000524fe0 pc=0x100073f21
created by decred.org/dcrdex/client/core.(*Core).fetchFiatExchangeRates
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:9804 +0x135

goroutine 70 [select]:
runtime.gopark(0xc00051b760?, 0x2?, 0x28?, 0xb6?, 0xc00051b73c?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00051b5c0 sp=0xc00051b5a0 pc=0x10003f356
runtime.selectgo(0xc00051b760, 0xc00051b738, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc00051b700 sp=0xc00051b5c0 pc=0x10004f4fe
decred.org/dcrdex/client/core.(*Core).watchBonds(0x0?, {0x1021d0030, 0xc0000ac4b0})
        /Users/philemon/Desktop/Decred/dcrdex/client/core/bond.go:44 +0xfa fp=0xc00051b798 sp=0xc00051b700 pc=0x10054283a
decred.org/dcrdex/client/core.(*Core).Run.func3()
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:1632 +0x66 fp=0xc00051b7e0 sp=0xc00051b798 pc=0x100571546
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00051b7e8 sp=0xc00051b7e0 pc=0x100073f21
created by decred.org/dcrdex/client/core.(*Core).Run
        /Users/philemon/Desktop/Decred/dcrdex/client/core/core.go:1630 +0x670

goroutine 49 [chan receive]:
runtime.gopark(0xc00051aed8?, 0x100078205?, 0xd8?, 0xae?, 0x1001144e6?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00051aeb0 sp=0xc00051ae90 pc=0x10003f356
runtime.chanrecv(0xc000288900, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc00051af40 sp=0xc00051aeb0 pc=0x10000b2fd
runtime.chanrecv1(0xc0004e0000?, 0x1021d00a0?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc00051af68 sp=0xc00051af40 pc=0x10000adf8
decred.org/dcrdex/client/rpcserver.(*RPCServer).Connect.func1()
        /Users/philemon/Desktop/Decred/dcrdex/client/rpcserver/rpcserver.go:273 +0x73 fp=0xc00051afe0 sp=0xc00051af68 pc=0x100611453
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00051afe8 sp=0xc00051afe0 pc=0x100073f21
created by decred.org/dcrdex/client/rpcserver.(*RPCServer).Connect
        /Users/philemon/Desktop/Decred/dcrdex/client/rpcserver/rpcserver.go:271 +0x1db

goroutine 16 [chan receive]:
runtime.gopark(0x100071d2e?, 0xc000642300?, 0xa8?, 0xae?, 0xc00008aef8?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00008ae90 sp=0xc00008ae70 pc=0x10003f356
runtime.chanrecv(0xc0000ae6c0, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc00008af20 sp=0xc00008ae90 pc=0x10000b2fd
runtime.chanrecv1(0xc000640ff0?, 0x1021d0030?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc00008af48 sp=0xc00008af20 pc=0x10000adf8
decred.org/dcrdex/dex.(*ConnectionMaster).Wait(...)
        /Users/philemon/Desktop/Decred/dcrdex/dex/runner.go:190
main.mainCore.func6()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:281 +0x15e fp=0xc00008afe0 sp=0xc00008af48 pc=0x10124451e
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00008afe8 sp=0xc00008afe0 pc=0x100073f21
created by main.mainCore
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:277 +0xf38

goroutine 82 [IO wait]:
runtime.gopark(0x0?, 0x10ba364a8?, 0xc7?, 0x1?, 0x8?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc00008bba8 sp=0xc00008bb88 pc=0x10003f356
runtime.netpollblock(0x10329a5b8?, 0x806f?, 0x1?)
        /usr/local/go/src/runtime/netpoll.go:527 +0xf7 fp=0xc00008bbe0 sp=0xc00008bba8 pc=0x100038457
internal/poll.runtime_pollWait(0x10ba713c0, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0x89 fp=0xc00008bc00 sp=0xc00008bbe0 pc=0x10006d549
internal/poll.(*pollDesc).wait(0xc0003c8000?, 0xd0?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32 fp=0xc00008bc28 sp=0xc00008bc00 pc=0x1000e6d12
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Accept(0xc0003c8000)
        /usr/local/go/src/internal/poll/fd_unix.go:614 +0x2bd fp=0xc00008bcd0 sp=0xc00008bc28 pc=0x1000ec61d
net.(*netFD).accept(0xc0003c8000)
        /usr/local/go/src/net/fd_unix.go:172 +0x35 fp=0xc00008bd88 sp=0xc00008bcd0 pc=0x10013b0f5
net.(*TCPListener).accept(0xc0003827b0)
        /usr/local/go/src/net/tcpsock_posix.go:148 +0x25 fp=0xc00008bdb0 sp=0xc00008bd88 pc=0x1001547c5
net.(*TCPListener).Accept(0xc0003827b0)
        /usr/local/go/src/net/tcpsock.go:297 +0x3d fp=0xc00008bde0 sp=0xc00008bdb0 pc=0x1001538dd
crypto/tls.(*listener).Accept(0xc000382858)
        /usr/local/go/src/crypto/tls/tls.go:66 +0x2d fp=0xc00008be20 sp=0xc00008bde0 pc=0x10028228d
net/http.(*onceCloseListener).Accept(0x1021d0068?)
        <autogenerated>:1 +0x2a fp=0xc00008be38 sp=0xc00008be20 pc=0x100347f0a
net/http.(*Server).Serve(0xc0002bc0f0, {0x1021cc430, 0xc000382858})
        /usr/local/go/src/net/http/server.go:3059 +0x385 fp=0xc00008bf68 sp=0xc00008be38 pc=0x1003240a5
decred.org/dcrdex/client/rpcserver.(*RPCServer).Connect.func3()
        /Users/philemon/Desktop/Decred/dcrdex/client/rpcserver/rpcserver.go:289 +0x6f fp=0xc00008bfe0 sp=0xc00008bf68 pc=0x1006111ef
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00008bfe8 sp=0xc00008bfe0 pc=0x100073f21
created by decred.org/dcrdex/client/rpcserver.(*RPCServer).Connect
        /Users/philemon/Desktop/Decred/dcrdex/client/rpcserver/rpcserver.go:287 +0x30a

goroutine 83 [semacquire]:
runtime.gopark(0x2d19b5c02760e61?, 0x3ce50bd0196016c?, 0x80?, 0xe4?, 0x312b6a5014c2c07?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000406ef0 sp=0xc000406ed0 pc=0x10003f356
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.semacquire1(0xc0000fa2e8, 0xe0?, 0x1, 0x0, 0x40?)
        /usr/local/go/src/runtime/sema.go:160 +0x20f fp=0xc000406f58 sp=0xc000406ef0 pc=0x1000505ef
sync.runtime_Semacquire(0xa8ce0d02499782?)
        /usr/local/go/src/runtime/sema.go:62 +0x27 fp=0xc000406f90 sp=0xc000406f58 pc=0x10006f307
sync.(*WaitGroup).Wait(0x26fa4ac02ffc1e8?)
        /usr/local/go/src/sync/waitgroup.go:116 +0x4b fp=0xc000406fb8 sp=0xc000406f90 pc=0x10009106b
decred.org/dcrdex/dex.(*ConnectionMaster).Connect.func1()
        /Users/philemon/Desktop/Decred/dcrdex/dex/runner.go:140 +0x2f fp=0xc000406fe0 sp=0xc000406fb8 pc=0x10036deef
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000406fe8 sp=0xc000406fe0 pc=0x100073f21
created by decred.org/dcrdex/dex.(*ConnectionMaster).Connect
        /Users/philemon/Desktop/Decred/dcrdex/dex/runner.go:139 +0x159

goroutine 98 [chan receive]:
runtime.gopark(0xc0004b2ed8?, 0x100078205?, 0xd8?, 0x2e?, 0x1001144e6?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004b2eb0 sp=0xc0004b2e90 pc=0x10003f356
runtime.chanrecv(0xc000474060, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc0004b2f40 sp=0xc0004b2eb0 pc=0x10000b2fd
runtime.chanrecv1(0xc0003ce370?, 0xc000640ff0?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc0004b2f68 sp=0xc0004b2f40 pc=0x10000adf8
decred.org/dcrdex/client/webserver.(*WebServer).Connect.func1()
        /Users/philemon/Desktop/Decred/dcrdex/client/webserver/webserver.go:538 +0x71 fp=0xc0004b2fe0 sp=0xc0004b2f68 pc=0x100689b31
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004b2fe8 sp=0xc0004b2fe0 pc=0x100073f21
created by decred.org/dcrdex/client/webserver.(*WebServer).Connect
        /Users/philemon/Desktop/Decred/dcrdex/client/webserver/webserver.go:536 +0x2e5

goroutine 99 [IO wait]:
runtime.gopark(0x0?, 0x100012268?, 0x40?, 0x3?, 0xd0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000520bf0 sp=0xc000520bd0 pc=0x10003f356
runtime.netpollblock(0x1032a5c28?, 0x806f?, 0x1?)
        /usr/local/go/src/runtime/netpoll.go:527 +0xf7 fp=0xc000520c28 sp=0xc000520bf0 pc=0x100038457
internal/poll.runtime_pollWait(0x10ba712d0, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0x89 fp=0xc000520c48 sp=0xc000520c28 pc=0x10006d549
internal/poll.(*pollDesc).wait(0xc00015e180?, 0xc000520d30?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32 fp=0xc000520c70 sp=0xc000520c48 pc=0x1000e6d12
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Accept(0xc00015e180)
        /usr/local/go/src/internal/poll/fd_unix.go:614 +0x2bd fp=0xc000520d18 sp=0xc000520c70 pc=0x1000ec61d
net.(*netFD).accept(0xc00015e180)
        /usr/local/go/src/net/fd_unix.go:172 +0x35 fp=0xc000520dd0 sp=0xc000520d18 pc=0x10013b0f5
net.(*TCPListener).accept(0xc0006ac288)
        /usr/local/go/src/net/tcpsock_posix.go:148 +0x25 fp=0xc000520df8 sp=0xc000520dd0 pc=0x1001547c5
net.(*TCPListener).Accept(0xc0006ac288)
        /usr/local/go/src/net/tcpsock.go:297 +0x3d fp=0xc000520e28 sp=0xc000520df8 pc=0x1001538dd
net/http.(*onceCloseListener).Accept(0x1021d0068?)
        <autogenerated>:1 +0x2a fp=0xc000520e40 sp=0xc000520e28 pc=0x100347f0a
net/http.(*Server).Serve(0xc0002bc2d0, {0x1021cebf0, 0xc0006ac288})
        /usr/local/go/src/net/http/server.go:3059 +0x385 fp=0xc000520f70 sp=0xc000520e40 pc=0x1003240a5
decred.org/dcrdex/client/webserver.(*WebServer).Connect.func3()
        /Users/philemon/Desktop/Decred/dcrdex/client/webserver/webserver.go:553 +0x76 fp=0xc000520fe0 sp=0xc000520f70 pc=0x1006898b6
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000520fe8 sp=0xc000520fe0 pc=0x100073f21
created by decred.org/dcrdex/client/webserver.(*WebServer).Connect
        /Users/philemon/Desktop/Decred/dcrdex/client/webserver/webserver.go:551 +0x438

goroutine 100 [select]:
runtime.gopark(0xc0004b3f68?, 0x2?, 0x0?, 0x3e?, 0xc0004b3f4c?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004b3dd8 sp=0xc0004b3db8 pc=0x10003f356
runtime.selectgo(0xc0004b3f68, 0xc0004b3f48, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc0004b3f18 sp=0xc0004b3dd8 pc=0x10004f4fe
decred.org/dcrdex/client/webserver.(*WebServer).readNotifications(0xc0000fa300, {0x1021d0030, 0xc0003ce370})
        /Users/philemon/Desktop/Decred/dcrdex/client/webserver/webserver.go:731 +0xc9 fp=0xc0004b3f98 sp=0xc0004b3f18 pc=0x10068ad49
decred.org/dcrdex/client/webserver.(*WebServer).Connect.func4()
        /Users/philemon/Desktop/Decred/dcrdex/client/webserver/webserver.go:566 +0x65 fp=0xc0004b3fe0 sp=0xc0004b3f98 pc=0x1006897a5
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004b3fe8 sp=0xc0004b3fe0 pc=0x100073f21
created by decred.org/dcrdex/client/webserver.(*WebServer).Connect
        /Users/philemon/Desktop/Decred/dcrdex/client/webserver/webserver.go:564 +0x4d2

goroutine 101 [semacquire]:
runtime.gopark(0x0?, 0x0?, 0xc0?, 0xa0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004ad6f0 sp=0xc0004ad6d0 pc=0x10003f356
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.semacquire1(0xc0004b4038, 0x0?, 0x1, 0x0, 0x0?)
        /usr/local/go/src/runtime/sema.go:160 +0x20f fp=0xc0004ad758 sp=0xc0004ad6f0 pc=0x1000505ef
sync.runtime_Semacquire(0x0?)
        /usr/local/go/src/runtime/sema.go:62 +0x27 fp=0xc0004ad790 sp=0xc0004ad758 pc=0x10006f307
sync.(*WaitGroup).Wait(0x0?)
        /usr/local/go/src/sync/waitgroup.go:116 +0x4b fp=0xc0004ad7b8 sp=0xc0004ad790 pc=0x10009106b
decred.org/dcrdex/dex.(*ConnectionMaster).Connect.func1()
        /Users/philemon/Desktop/Decred/dcrdex/dex/runner.go:140 +0x2f fp=0xc0004ad7e0 sp=0xc0004ad7b8 pc=0x10036deef
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004ad7e8 sp=0xc0004ad7e0 pc=0x100073f21
created by decred.org/dcrdex/dex.(*ConnectionMaster).Connect
        /Users/philemon/Desktop/Decred/dcrdex/dex/runner.go:139 +0x159

goroutine 102 [chan receive]:
runtime.gopark(0xc0004e6d98?, 0x10001f3f1?, 0x60?, 0x54?, 0xc0004e6e00?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004e6d80 sp=0xc0004e6d60 pc=0x10003f356
runtime.chanrecv(0xc0002880c0, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc0004e6e10 sp=0xc0004e6d80 pc=0x10000b2fd
runtime.chanrecv1(0xc000334e10?, 0xc000156090?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc0004e6e38 sp=0xc0004e6e10 pc=0x10000adf8
main.runServer({0x1021d0030, 0xc0000ac4b0}, {0xc000163900, 0x38}, 0xc0000ae720, 0xc0000a27e0, 0x0?)
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/syncserver.go:146 +0x5bb fp=0xc0004e6f78 sp=0xc0004e6e38 pc=0x101241ebb
main.mainCore.func7()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:296 +0x79 fp=0xc0004e6fe0 sp=0xc0004e6f78 pc=0x101244319
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004e6fe8 sp=0xc0004e6fe0 pc=0x100073f21
created by main.mainCore
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:294 +0x109d

goroutine 104 [syscall]:
syscall.syscall6(0x100012108?, 0x100369f95?, 0x1021c3fe0?, 0x1013e98a0?, 0x100c0006ac2d0?, 0x1000000000003?, 0x10ba35d28?)
        /usr/local/go/src/runtime/sys_darwin.go:45 +0x99 fp=0xc00008dd60 sp=0xc00008dca0 pc=0x100070599
syscall.wait4(0xc00008dde8?, 0x1000124e7?, 0x90?, 0x10172b0c0?)
        /usr/local/go/src/syscall/zsyscall_darwin_amd64.go:43 +0x48 fp=0xc00008ddc0 sp=0xc00008dd60 pc=0x1000c6008
syscall.Wait4(0x0?, 0xc00008de1c, 0x0?, 0x0?)
        /usr/local/go/src/syscall/syscall_bsd.go:144 +0x2b fp=0xc00008ddf8 sp=0xc00008ddc0 pc=0x1000c36ab
os.(*Process).wait(0xc0003eea50)
        /usr/local/go/src/os/exec_unix.go:43 +0x77 fp=0xc00008de50 sp=0xc00008ddf8 pc=0x1000f2057
os.(*Process).Wait(...)
        /usr/local/go/src/os/exec.go:132
os/exec.(*Cmd).Wait(0xc00017e840)
        /usr/local/go/src/os/exec/exec.go:890 +0x45 fp=0xc00008deb8 sp=0xc00008de50 pc=0x100715725
os/exec.(*Cmd).Run(0x1014ffac0?)
        /usr/local/go/src/os/exec/exec.go:590 +0x39 fp=0xc00008ded8 sp=0xc00008deb8 pc=0x100714239
main.runWebviewSubprocess({0x1021d0030?, 0xc0000ac4b0?}, {0xc0001221b0?, 0xc0004b4020?})
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:435 +0x21a fp=0xc00008df90 sp=0xc00008ded8 pc=0x10124527a
main.mainCore.func9.1()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:313 +0x65 fp=0xc00008dfe0 sp=0xc00008df90 pc=0x101243fa5
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00008dfe8 sp=0xc00008dfe0 pc=0x100073f21
created by main.mainCore.func9
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/main.go:312 +0xba

goroutine 84 [chan receive]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x100324520?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc000409700 sp=0xc0004096e0 pc=0x10003f356
runtime.chanrecv(0xc0004740c0, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x49d fp=0xc000409790 sp=0xc000409700 pc=0x10000b2fd
runtime.chanrecv1(0x1006899e0?, 0xc0004b4030?)
        /usr/local/go/src/runtime/chan.go:442 +0x18 fp=0xc0004097b8 sp=0xc000409790 pc=0x10000adf8
fyne.io/systray.Register.func2()
        /Users/philemon/go/pkg/mod/fyne.io/systray@v1.10.1-0.20230403195833-7dc3c09283d6/systray.go:111 +0x28 fp=0xc0004097e0 sp=0xc0004097b8 pc=0x10123ca48
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004097e8 sp=0xc0004097e0 pc=0x100073f21
created by fyne.io/systray.Register
        /Users/philemon/go/pkg/mod/fyne.io/systray@v1.10.1-0.20230403195833-7dc3c09283d6/systray.go:110 +0xc5

goroutine 71 [IO wait]:
runtime.gopark(0x0?, 0x100012268?, 0xa0?, 0x61?, 0xd0?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004e7bf0 sp=0xc0004e7bd0 pc=0x10003f356
runtime.netpollblock(0x10ba36cc8?, 0x806f?, 0x1?)
        /usr/local/go/src/runtime/netpoll.go:527 +0xf7 fp=0xc0004e7c28 sp=0xc0004e7bf0 pc=0x100038457
internal/poll.runtime_pollWait(0x10ba711e0, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0x89 fp=0xc0004e7c48 sp=0xc0004e7c28 pc=0x10006d549
internal/poll.(*pollDesc).wait(0xc0003c8080?, 0xc0004e7d30?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32 fp=0xc0004e7c70 sp=0xc0004e7c48 pc=0x1000e6d12
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Accept(0xc0003c8080)
        /usr/local/go/src/internal/poll/fd_unix.go:614 +0x2bd fp=0xc0004e7d18 sp=0xc0004e7c70 pc=0x1000ec61d
net.(*netFD).accept(0xc0003c8080)
        /usr/local/go/src/net/fd_unix.go:172 +0x35 fp=0xc0004e7dd0 sp=0xc0004e7d18 pc=0x10013b0f5
net.(*TCPListener).accept(0xc0001183d8)
        /usr/local/go/src/net/tcpsock_posix.go:148 +0x25 fp=0xc0004e7df8 sp=0xc0004e7dd0 pc=0x1001547c5
net.(*TCPListener).Accept(0xc0001183d8)
        /usr/local/go/src/net/tcpsock.go:297 +0x3d fp=0xc0004e7e28 sp=0xc0004e7df8 pc=0x1001538dd
net/http.(*onceCloseListener).Accept(0x1021d0068?)
        <autogenerated>:1 +0x2a fp=0xc0004e7e40 sp=0xc0004e7e28 pc=0x100347f0a
net/http.(*Server).Serve(0xc0002bc4b0, {0x1021cebf0, 0xc0001183d8})
        /usr/local/go/src/net/http/server.go:3059 +0x385 fp=0xc0004e7f70 sp=0xc0004e7e40 pc=0x1003240a5
main.runServer.func1()
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/syncserver.go:140 +0x65 fp=0xc0004e7fe0 sp=0xc0004e7f70 pc=0x1012420c5
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004e7fe8 sp=0xc0004e7fe0 pc=0x100073f21
created by main.runServer
        /Users/philemon/Desktop/Decred/dcrdex/client/cmd/dexc-desktop/syncserver.go:138 +0x59e

goroutine 105 [select]:
runtime.gopark(0xc0004aef70?, 0x2?, 0xd9?, 0xef?, 0xc0004aeeec?)
        /usr/local/go/src/runtime/proc.go:381 +0xd6 fp=0xc0004aed40 sp=0xc0004aed20 pc=0x10003f356
runtime.selectgo(0xc0004aef70, 0xc0004aeee8, 0x10036f3f4?, 0x1, 0x1017f07df?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x7be fp=0xc0004aee80 sp=0xc0004aed40 pc=0x10004f4fe
os/exec.(*Cmd).watchCtx(0xc00017e840, 0xc0000ae7e0)
        /usr/local/go/src/os/exec/exec.go:757 +0xc5 fp=0xc0004aefc0 sp=0xc0004aee80 pc=0x100715205
os/exec.(*Cmd).Start.func4()
        /usr/local/go/src/os/exec/exec.go:743 +0x2a fp=0xc0004aefe0 sp=0xc0004aefc0 pc=0x100714e4a
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0004aefe8 sp=0xc0004aefe0 pc=0x100073f21
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:743 +0x9f3

rax    0x0
rbx    0x700011ab4000
rcx    0x700011ab2568
rdx    0x0
rdi    0x250b
rsi    0x6
rbp    0x700011ab2590
rsp    0x700011ab2568
r8     0x700011ab2430
r9     0x700011ab2600
r10    0x700011ab4000
r11    0x246
r12    0x250b
r13    0x3000000008
r14    0x6
r15    0x16
rip    0x7fff72bf532a
rflags 0x246
cs     0x7
fs     0x0
gs     0x0

@chappjc
Copy link
Member

chappjc commented Apr 29, 2023

@ukane-philemon Would you try a fresh project with just this to see if it works on your mac?

package main

import "github.com/webview/webview"

func main() {
	w := webview.New(false)
	defer w.Destroy()
	w.SetTitle("Example")
	w.SetSize(480, 320, webview.HintNone)
	w.Navigate("http://127.0.0.1:8080")
	w.Run()
}

@ukane-philemon
Copy link
Contributor

The issue for MacOS is executing systray.Run in a goroutine. I moved systray.Run to the main thread and that fixed the issue. I will let you know after I try this, though.

@chappjc
Copy link
Member

chappjc commented Apr 29, 2023

I moved systray.Run to the main thread and that fixed the issue

Nice. I think I recall that issue when working on dexc/main_tray.go
The UI interactions need to be in the main thread for some reason

Comment on lines 320 to 323
windowloop:
for {
var backgroundNoteSent bool
select {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like main needs a refactor so that this is in a goroutine and main is just blocking on systray.Run.

@ukane-philemon
Copy link
Contributor

@ukane-philemon Would you try a fresh project with just this to see if it works on your mac?

Yup, no panic with your suggestion. #1957 (comment)

@ukane-philemon
Copy link
Contributor

While testing #2333, I noticed that the open logs folder in the start menu opens a blank window.

@ukane-philemon
Copy link
Contributor

@buck54321, I have some code suggestions that might interest you here e2a3f17.

@buck54321
Copy link
Member Author

While testing #2333, I noticed that the open logs folder in the start menu opens a blank window.

I added a debug-level log for the the output of FilePathToURL. You can run with --log debug --stdout to see where it's sending you.

run_tests.sh Show resolved Hide resolved
@chappjc
Copy link
Member

chappjc commented May 4, 2023

While testing #2333, I noticed that the open logs folder in the start menu opens a blank window.

I added a debug-level log for the the output of FilePathToURL. You can run with --log debug --stdout to see where it's sending you.

@ukane-philemon maybe try with the path = strings.ReplaceAll(path, " ", "%20") comment used before url.Parse. I made that note because if some quirks in my mac vm when dexc_tray was added.

@ukane-philemon
Copy link
Contributor

ukane-philemon commented May 4, 2023

While testing #2333, I noticed that the open logs folder in the start menu opens a blank window.

I added a debug-level log for the the output of FilePathToURL. You can run with --log debug --stdout to see where it's sending you.

Okay.
EDIT: It's a valid dir file:// URL that opens on my browser but not via webview. I can only view a file on webview.

Comment on lines +404 to +414
log.Infof("Closing window. %d windows remain open.", remain)
cmd.Process.Kill()
Copy link
Contributor

@ukane-philemon ukane-philemon May 4, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I shut down before a webview is opened, I see a panic since cmd.Process will still be nil but have been added to m.windows giving another process an opportunity to access cmd.Process.

Comment on lines 421 to 432
w.SetTitle("Decred DEX Client")
w.SetSize(int(C.display_width()), int(C.display_height()), webview.HintNone)
Copy link
Contributor

@ukane-philemon ukane-philemon May 4, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also set a min width here. w.SetSize(600, 600, webview.HintMin)(min width & height can be anything > 100). The webview almost disappears when I click on minimise and it doesn't look good if users can minimise the window all the way.

Comment on lines 361 to 365
systray.Run(func() {
systrayOnReady(appCtx, filepath.Dir(cfg.LogPath), openC, killChan)
}, func() {
wg.Done()
})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should remove wg.Done(), the last func argument can just be nil.

Comment on lines 312 to 313
defer wg.Done()

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also defer cancel() here since we will no longer be able to create new windows if this goroutine is exited.

@chappjc
Copy link
Member

chappjc commented May 7, 2023

Made some conflicts for you. Getting to final review though

Copy link
Member

@chappjc chappjc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still testing stuff, but have a couple tiny issues to report before taking a break.

client/cmd/dexc/main.go Show resolved Hide resolved
client/cmd/dexc-desktop/syncserver.go Outdated Show resolved Hide resolved
package a desktop version for Debian

Introduce a new cmd, dexc-desktop. This coordinates a WebView
window with our normal dexc stack.

Moves some common utilities to a new package client/app.

Co-authored-by: Jonathan Chappelow <chappjc@gmail.com>
@chappjc chappjc merged commit 9d2d964 into decred:master May 9, 2023
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 this pull request may close these issues.

5 participants