Closed hfabre closed 3 years ago
Maybe try a newer gotk3, gotk3/gotk3#593 was fixed since v0.4.0
Not very familiar with Go nor go modules but looking at my go.mod
looks like I'm already on v0.4.0:
module ttme
go 1.13
require (
github.com/gotk3/gotk3 v0.4.0 // indirect
github.com/lachee/raylib-goplus v0.0.0-20200605081007-7ca39b8afc71
github.com/sqweek/dialog v0.0.0-20200601143742-43ea34326190
)
I guess I should try using gtk3 upstream but I really don't know how to do, any ideas ?
Yes, I mean the gotk3 fix happened after v0.4.0 -- 114 commits later to be exact. They haven't made a newer release yet, but there must be a way to ask go mod for a specific commit, see if you can try it with b248c84
Just tried with
github.com/gotk3/gotk3 v0.4.1-0.20200606044958-b248c84e8b17 // indirect
But it looks like the problem is still here:
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x80 addr=0x0 pc=0x7f08f1e58d74]
runtime stack:
runtime.throw(0x9b68fb, 0x2a)
/usr/lib/golang/src/runtime/panic.go:1116 +0x72
runtime.sigpanic()
/usr/lib/golang/src/runtime/signal_unix.go:679 +0x46a
goroutine 1 [syscall, locked to thread]:
runtime.cgocall(0x895ee0, 0xc0000dd7d0, 0x29da450)
/usr/lib/golang/src/runtime/cgocall.go:133 +0x5b fp=0xc0000dd7a0 sp=0xc0000dd768 pc=0x4a3fcb
github.com/gotk3/gotk3/gtk._Cfunc_gtk_dialog_run(0x29da450, 0x0)
_cgo_gotypes.go:9356 +0x49 fp=0xc0000dd7d0 sp=0xc0000dd7a0 pc=0x5ed349
github.com/gotk3/gotk3/gtk.(*Dialog).Run.func1(0xc000164310, 0xc000164201)
/home/hfabre/go/pkg/mod/github.com/gotk3/gotk3@v0.4.1-0.20200606044958-b248c84e8b17/gtk/gtk.go:2968 +0x5b fp=0xc0000dd808 sp=0xc0000dd7d0 pc=0x69017b
github.com/gotk3/gotk3/gtk.(*Dialog).Run(0xc000164310, 0x1)
/home/hfabre/go/pkg/mod/github.com/gotk3/gotk3@v0.4.1-0.20200606044958-b248c84e8b17/gtk/gtk.go:2968 +0x2b fp=0xc0000dd828 sp=0xc0000dd808 pc=0x64248b
github.com/sqweek/dialog.chooseFile(0x9af195, 0x9, 0x9ae77c, 0x4, 0x0, 0xc0000dda48, 0x0, 0x0, 0x0, 0x0)
/home/hfabre/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200601143742-43ea34326190/dlgs_linux.go:79 +0x37c fp=0xc0000dd998 sp=0xc0000dd828 pc=0x7cb7ec
github.com/sqweek/dialog.(*FileBuilder).load(...)
/home/hfabre/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200601143742-43ea34326190/dlgs_linux.go:45
github.com/sqweek/dialog.(*FileBuilder).Load(0xc0000dda48, 0x41c8000042960000, 0x9b01b4, 0xe, 0x3f800001)
/home/hfabre/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200601143742-43ea34326190/dlgs.go:112 +0x62 fp=0xc0000dd9f8 sp=0xc0000dd998 pc=0x7cb2d2
ttme/src.(*tilesetConfigurationWidget).Draw(0xc0000ddce0, 0xc000110000)
/home/hfabre/local/go/ttme/src/tleset_configuration_widget.go:28 +0x352 fp=0xc0000dda90 sp=0xc0000dd9f8 pc=0x7d08a2
ttme/src.(*app).Start(0xc00009a510)
/home/hfabre/local/go/ttme/src/app.go:78 +0x583 fp=0xc0000ddf50 sp=0xc0000dda90 pc=0x7cc2c3
main.main()
/home/hfabre/local/go/ttme/main.go:9 +0x56 fp=0xc0000ddf88 sp=0xc0000ddf50 pc=0x7d1da6
runtime.main()
/usr/lib/golang/src/runtime/proc.go:203 +0x1fa fp=0xc0000ddfe0 sp=0xc0000ddf88 pc=0x4d4caa
runtime.goexit()
/usr/lib/golang/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000ddfe8 sp=0xc0000ddfe0 pc=0x4ff731
exit status 2
make: *** [Makefile:4: run] Error 1
Ok, thanks for trying. Still looks like gotk3's fault; I'm kind of wishing I hadn't been convinced to switch to gtk3 but I'll try to make time on the weekend to see what's going wrong.
Don't have my laptop for a week but if you need any help testing later I'm in. Le 10 sept. 2020 6:25 PM, sqweek notifications@github.com a écrit : Ok, thanks for trying. Still looks like gotk3's fault; I'm kind of wishing I hadn't been convinced to switch to gtk3 but I'll try to make time on the weekend to see what's going wrong.
—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or unsubscribe.
Ok I tried to bisect gotk3 but half their commits don't build against gtk 3.10 so I gave up. Not that I could reproduce the failure with v0.4.0, but anyway it's not like dialog needs to depend on such a comprehensive wrapper for the tiny area of gtk it touches, so I've removed the gotk3 dependency altogether. Please let me know if you encounter new problems!
Hi there just came back from holidays sorry.
I still encounter the bug with version github.com/sqweek/dialog v0.0.0-20200911184034-8a3d98e8211d
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x7ffa38869d74]
runtime stack:
runtime.throw(0x5c518f, 0x2a)
/usr/lib/golang/src/runtime/panic.go:1116 +0x72
runtime.sigpanic()
/usr/lib/golang/src/runtime/signal_unix.go:679 +0x46a
goroutine 1 [syscall, locked to thread]:
runtime.cgocall(0x58a390, 0xc00012f700, 0xfffffffd00000000)
/usr/lib/golang/src/runtime/cgocall.go:133 +0x5b fp=0xc00012f6d0 sp=0xc00012f698 pc=0x42edbb
github.com/sqweek/dialog._Cfunc_gtk_dialog_run(0x2c5a3b0, 0x0)
_cgo_gotypes.go:229 +0x49 fp=0xc00012f700 sp=0xc00012f6d0 pc=0x4c6849
github.com/sqweek/dialog.chooseFile.func11(0x2c5a3b0, 0x0)
/home/hfabre/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:93 +0x4d fp=0xc00012f730 sp=0xc00012f700 pc=0x4c7ccd
github.com/sqweek/dialog.chooseFile(0x5bf140, 0x9, 0x5be910, 0x4, 0x41c8000000000000, 0xc00012fa48, 0x0, 0x0, 0x0, 0x0)
/home/hfabre/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:93 +0x3b6 fp=0xc00012f998 sp=0xc00012f730 pc=0x4c7326
github.com/sqweek/dialog.(*FileBuilder).load(...)
/home/hfabre/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:55
github.com/sqweek/dialog.(*FileBuilder).Load(0xc00012fa48, 0x41c8000042960000, 0x5bfd4a, 0xe, 0x3f800001)
/home/hfabre/go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs.go:112 +0x61 fp=0xc00012f9f8 sp=0xc00012f998 pc=0x4c65a1
ttme/src.(*tilesetConfigurationWidget).Draw(0xc00012fce0, 0xc000128000)
/home/hfabre/local/go/ttme/src/tileset_configuration_widget.go:28 +0x352 fp=0xc00012fa90 sp=0xc00012f9f8 pc=0x4cb062
ttme/src.(*app).Start(0xc00007e150)
/home/hfabre/local/go/ttme/src/app.go:78 +0x583 fp=0xc00012ff50 sp=0xc00012fa90 pc=0x4c8893
main.main()
/home/hfabre/local/go/ttme/main.go:9 +0x56 fp=0xc00012ff88 sp=0xc00012ff50 pc=0x4cbde6
runtime.main()
/usr/lib/golang/src/runtime/proc.go:203 +0x1fa fp=0xc00012ffe0 sp=0xc00012ff88 pc=0x45daca
runtime.goexit()
/usr/lib/golang/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc00012ffe8 sp=0xc00012ffe0 pc=0x4882b1
exit status 2
make: *** [Makefile:4: run] Error 1
Did I missed something ?
Hm nope, I don't see a reason for the crash. What version of gtk+3 do you have installed?
$ pkg-config --modversion gtk+-3.0
3.24.22
Not sure if this is what you are looking for, just tell me.
I've investigated the gtk+ source but I still can't see how the NULL dereference happens.
You mention different behaviour depending on whether you have a gtk main loop running or not. gtk_dialog_run also spawns a main loop so it could be a poor interaction somehow between those? Are you running your main loop and the dialog call on different threads, and if so do you know anything about what thread safety gtk+ provides?
I won't get time to look into these questions, but if you are able to isolate a minimal program structure which reproduces the crash I'm happy to debug it.
This is a tangent, but since your app is using gtk already I'd also be interested to know your motivation behind using this dialog package (rather than eg. using gtk dialogs directly) :)
Hi, I will try to isolate the bug. But I expressed myself poorly, I don't use gtk, I use an immediate mode GUI library that does not support native file dialog, that's why I'm using dialog.
The fact is that if I launch a dialog window before entering my main loop (it is not part of my business, it was just a test) it works and my dialog inside the loop works well but if I don't launch a dialog before entering the main loop, my real dialog segfault
Hi sqweek, I'm able to reproduce the bug with this gist, I think it's pretty straight forward, feel free to reach me if you have any question.
Thanks! Unfortunately I don't have an actual linux box at the moment - I develop the gtk side of things on windows using WSL. Apparently there's no windows X server which supports opening a GLFW window and so raylib can't open a window to run your test. Sorry but I don't think I can solve this issue in the short term :(
Oh ok, np. The weird thing is that I already used dialog with another raylib binding (in go as well) with success some times ago. I'll try to reproduce to see if it comes from the binding or just with an older version of dialog and I let you know
Just tried with the old version and the other binding still get the bug (almost sure it worked well a year ago). Same with a fresh gtk+3 install under an Ubuntu. I'm starting to think this is a gtk bug but I really don't know much about it.
I'm getting this issue on lubuntu 20.04 LTS
.-/+oossssoo+/-. dk@pancake
`:+ssssssssssssssssss+:` ----------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 20.04.1 LTS x86_64
.ossssssssssssssssssdMMMNysssso. Host: NUC6i7KYK H90755-112
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 5.4.0-58-generic
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 4 days, 13 hours, 54 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 2993 (dpkg), 10 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.0.17
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 1920x1200, 1920x1200, 1200x1920
ossyNMMMNyMMhsssssssssssssshmmmhssssssso WM: i3
ossyNMMMNyMMhsssssssssssssshmmmhssssssso Theme: Arc-Darker [GTK3]
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Icons: Adwaita [GTK3]
.ssssssssdMMMNhsssssssssshNMMMdssssssss. CPU: Intel i7-6770HQ (8) @ 3.500GHz
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ GPU: Intel Iris Pro Graphics 580
+sssssssssdmydMMMMMMMMddddyssssssss+ Memory: 11420MiB / 32005MiB
/ssssssssssshdmNNNNmyNMMMMhssssss/
.ossssssssssssssssssdMMMNysssso.
-+sssssssssssssssssyyyssss+-
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.
Error log:
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x7f9dd917afc4]
runtime stack:
runtime.throw(0x74a89e, 0x2a)
/usr/local/go/src/runtime/panic.go:1116 +0x72
runtime.sigpanic()
/usr/local/go/src/runtime/signal_unix.go:726 +0x4ac
goroutine 1 [syscall, locked to thread]:
runtime.cgocall(0x6b7590, 0xc000161a60, 0x0)
/usr/local/go/src/runtime/cgocall.go:133 +0x5b fp=0xc000161a30 sp=0xc0001619f8 pc=0x44f69b
github.com/sqweek/dialog._Cfunc_gtk_dialog_run(0x1c2a340, 0x0)
_cgo_gotypes.go:239 +0x49 fp=0xc000161a60 sp=0xc000161a30 pc=0x60ef49
github.com/sqweek/dialog.runMsgDlg.func4(0x1c2a340, 0x1c71da0)
/home/dk/.go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:39 +0x4d fp=0xc000161a90 sp=0xc000161a60 pc=0x6103cd
github.com/sqweek/dialog.runMsgDlg(0x73b178, 0xb, 0x0, 0x1, 0xc000161b70, 0xc000000000)
/home/dk/.go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:39 +0x1a9 fp=0xc000161b28 sp=0xc000161a90 pc=0x60fa49
github.com/sqweek/dialog.(*MsgBuilder).info(...)
/home/dk/.go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs_linux.go:47
github.com/sqweek/dialog.(*MsgBuilder).Info(...)
/home/dk/.go/pkg/mod/github.com/sqweek/dialog@v0.0.0-20200911184034-8a3d98e8211d/dlgs.go:56
github.com/OpenDiablo2/HellSpawner/hsapp.(*App).renderMainMenuBar.func2()
/home/dk/src/hellspawner-gravestench/hsapp/app.go:99 +0xfb fp=0xc000161ba0 sp=0xc000161b28 pc=0x61285b
github.com/AllenDang/giu.(*MenuItemWidget).Build(0xc0001c90a0)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/Widgets.go:876 +0x74 fp=0xc000161be0 sp=0xc000161ba0 pc=0x60b814
github.com/AllenDang/giu.Layout.Build(0xc0001c4ce0, 0x1, 0x1)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/Layout.go:11 +0x5a fp=0xc000161c08 sp=0xc000161be0 pc=0x609ada
github.com/AllenDang/giu.(*MenuWidget).Build(0xc0001ce2d0)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/Widgets.go:902 +0x85 fp=0xc000161c38 sp=0xc000161c08 pc=0x60b8a5
github.com/AllenDang/giu.Layout.Build(0xc000161d18, 0x3, 0x3)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/Layout.go:11 +0x5a fp=0xc000161c60 sp=0xc000161c38 pc=0x609ada
github.com/AllenDang/giu.(*MainMenuBarWidget).Build(0xc000161d00)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/Widgets.go:836 +0x68 fp=0xc000161c88 sp=0xc000161c60 pc=0x60b788
github.com/OpenDiablo2/HellSpawner/hsapp.(*App).renderMainMenuBar(0xc00007ced0)
/home/dk/src/hellspawner-gravestench/hsapp/app.go:102 +0x3a6 fp=0xc000161d58 sp=0xc000161c88 pc=0x611dc6
github.com/OpenDiablo2/HellSpawner/hsapp.(*App).render(0xc00007ced0)
/home/dk/src/hellspawner-gravestench/hsapp/app.go:49 +0x2f fp=0xc000161d88 sp=0xc000161d58 pc=0x61134f
github.com/OpenDiablo2/HellSpawner/hsapp.(*App).render-fm()
/home/dk/src/hellspawner-gravestench/hsapp/app.go:48 +0x2a fp=0xc000161da0 sp=0xc000161d88 pc=0x61294a
github.com/AllenDang/giu.(*MasterWindow).render(0xc000159420)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MasterWindow.go:170 +0x96 fp=0xc000161e20 sp=0xc000161da0 pc=0x60acd6
github.com/AllenDang/giu.(*MasterWindow).run.func1()
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MasterWindow.go:189 +0x59 fp=0xc000161e60 sp=0xc000161e20 pc=0x60c2b9
github.com/AllenDang/giu.Call.func1()
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MainThread.go:67 +0x2f fp=0xc000161e90 sp=0xc000161e60 pc=0x60c22f
github.com/AllenDang/giu.Run(0xc00000e5e0)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MainThread.go:53 +0x72 fp=0xc000161ec8 sp=0xc000161e90 pc=0x60a092
github.com/AllenDang/giu.(*MasterWindow).Main(0xc000159420, 0xc00016bda0)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MasterWindow.go:236 +0x65 fp=0xc000161ee8 sp=0xc000161ec8 pc=0x60afe5
github.com/OpenDiablo2/HellSpawner/hsapp.(*App).Run(0xc00007ced0)
/home/dk/src/hellspawner-gravestench/hsapp/app.go:45 +0xec fp=0xc000161f48 sp=0xc000161ee8 pc=0x6112ec
main.main()
/home/dk/src/hellspawner-gravestench/main.go:16 +0x85 fp=0xc000161f88 sp=0xc000161f48 pc=0x6129e5
runtime.main()
/usr/local/go/src/runtime/proc.go:204 +0x209 fp=0xc000161fe0 sp=0xc000161f88 pc=0x483dc9
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:1374 +0x1 fp=0xc000161fe8 sp=0xc000161fe0 pc=0x4b4c01
goroutine 6 [chan receive]:
github.com/AllenDang/giu.Call(0xc0001ce210)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MainThread.go:68 +0xaa
github.com/AllenDang/giu.(*MasterWindow).run(0xc000159420)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MasterWindow.go:187 +0x74
github.com/AllenDang/giu.(*MasterWindow).Main.func1()
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MasterWindow.go:241 +0x4d
github.com/AllenDang/giu.Run.func1(0xc00000e5e0, 0xc0000720c0)
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MainThread.go:50 +0x27
created by github.com/AllenDang/giu.Run
/home/dk/.go/pkg/mod/github.com/!allen!dang/giu@v0.4.2/MainThread.go:50 +0x6b
exit status 2
I'm pretty sure I have the dependencies met.
I've installed the following:
FYI We just needed to be able to init gtk manually.
This was some kind of threading issue for us. The fix was to export the init
func in dlgs_linux.go
and add no-op init funcs to the windows and darwin versions.
@gravestench Oh hm, thanks for the info!
After a little reading, it seems that the GTK API (especially since 3.6) mandates that all calls happen within the "main" thread, ie. the one running gtk_main
. Which is tricky from dialog's perspective because such a thread may not exist. Clearly it is not strictly necessary or dialog would not work at all, but it seems I'm in poorly defined territory. Main reference: https://stackoverflow.com/questions/18941307/calling-gtk-main-under-pthreadsecondary-thread-in-c-code
Regarding your fix, the go runtime guarantees that each module's init
function executes on the primordial thread. If I'm reading correctly you've moved the gtk_init
call so it happens within hsapp.(*App).Run
, which ... also runs on the primordial thread? Do you have any calls into dialogs from other threads/goroutines?
I'm not really sure why it works, I'm just glad that it does.
It's hard to say. We do plenty of dialog calls on callbacks for imgui click events, and we've had 0 issues since making the fix on our fork.
Oh and to clarify we do not use GTK directly. We are using an imgui library which, on Linux, initialized a GL context. As stated previously, the fix we made on our fork works and we've had no issues at all with dialog since then.
I am having the same issue, how do you fix this?
@Nv7-GitHub are you also using an openGL context in conjunction with dialog?
If you follow gravestench's comments you'll find an OpenDiablo2/dialog fork which works around the issue, but it also changes the API (you have to manually call dialog.Init
). I haven't found time to look further into a local reproducer or an API-preserving change.
I think I ran into this on the OpenDiablo2 fork as well. What I found was that it crashes because a null ptr gets passed to pthread_mutex_lock()
somewhere in libX11.
I'm able to get it working by calling XInitThreads()
before gtk_init()
, not really sure if that is a completely proper solution though.
Thanks @Ziemas! I'm confused as to why pthread_mutex_lock() or similar doesn't show up in the backtrace, but I've committed a fix based on your suggestion (after another user tested it in #58).
Optimistically closing this.
Hi, thanks for your work !
I'm running into a weird issue, I'm writing a gui application and when I click my button to open the file dialog it segfault. The thing that is very weird is that if at the start of my application (before running the main loop) i'm opening a file dialog it does it successfully and my button works after that (looks like gtk needs a warm up :smile: )
My call looks like that:
tscw.newPath, _ = dialog.File().Load()
Here is the stacktrace:
I feel like it's not very clear, ping me if you don't understand