gotk4 icon indicating copy to clipboard operation
gotk4 copied to clipboard

NewTextView crashes when accessing buffer, however, works normally under debug

Open yermak opened this issue 1 year ago • 2 comments

pkg/v0.3.1

pkg-config --modversion gtk4 4.16.12

Code to reproduce below, fails on buffer.Text(...), works well in debug mode, suspect something with AMD specific code, looking into output.


import (
	"github.com/diamondburned/gotk4/pkg/gio/v2"
	"github.com/diamondburned/gotk4/pkg/gtk/v4"
	"log"
	"os"
)


func main() {
	app := gtk.NewApplication("com.example.minimal-textview-bug", gio.ApplicationFlagsNone)

	app.ConnectActivate(func() {
		activate(app)
	})

	if code := app.Run(os.Args); code > 0 {
		os.Exit(code)
	}
}

func activate(app *gtk.Application) {
	window := gtk.NewApplicationWindow(app)
	window.SetTitle("Minimal TextView Bug Example")
	window.SetDefaultSize(400, 300)

	vbox := gtk.NewBox(gtk.OrientationVertical, 5)
	window.SetChild(vbox)

	textView := gtk.NewTextView()
	textView.SetVExpand(true)
	scrolledWindow := gtk.NewScrolledWindow()
	scrolledWindow.SetChild(textView)
	scrolledWindow.SetPolicy(gtk.PolicyAutomatic, gtk.PolicyAutomatic)
	vbox.Append(scrolledWindow)

	getTextButton := gtk.NewButtonWithLabel("Get Text")
	vbox.Append(getTextButton)

	getTextButton.ConnectClicked(func() {
		log.Println("Button Clicked")
		buffer := textView.Buffer()

		startIter := buffer.StartIter()
		endIter := buffer.EndIter()
		text := buffer.Text(startIter, endIter, true)
		log.Printf("Text Content: %s\n", text)
	})

	window.SetVisible(true)
}

Part of the log

Exception 0xc0000005 0x0 0xb13217229 0x7ffaa04bcfc1
PC=0x7ffaa04bcfc1
signal arrived during external code execution

runtime.cgocall(0x7ff7132656e0, 0xc000029a10)
	C:/Users/Yermak/Programs/go/go1.23.5/src/runtime/cgocall.go:167 +0x3e fp=0xc0000299e8 sp=0xc000029980 pc=0x7ff712f9847e
github.com/diamondburned/gotk4/pkg/gtk/v4._Cfunc_free(0x16a7fb57b70)
	_cgo_gotypes.go:10772 +0x49 fp=0xc000029a10 sp=0xc0000299e8 pc=0x7ff7131614e9
github.com/diamondburned/gotk4/pkg/gtk/v4.(*TextBuffer).Text.(*TextBuffer).Text.func2.func3()
	C:/Users/Yermak/Programs/go/go-pkg/pkg/mod/github.com/diamondburned/gotk4/[email protected]/gtk/v4/gtk.go:109630 +0x35 fp=0xc000029a48 sp=0xc000029a10 pc=0x7ff7131a9fd5
github.com/diamondburned/gotk4/pkg/gtk/v4.(*TextBuffer).Text(0xc00008e018, 0xc00008e020, 0xc00008e030, 0x20?)
	C:/Users/Yermak/Programs/go/go-pkg/pkg/mod/github.com/diamondburned/gotk4/[email protected]/gtk/v4/gtk.go:109632 +0xd2 fp=0xc000029ab8 sp=0xc000029a48 pc=0x7ff7131a9f32
main.activate.func1()
	C:/Users/Yermak/Projects/GoFamilyBudget/main.go:46 +0xcd fp=0xc000029b70 sp=0xc000029ab8 pc=0x7ff71322a72d
github.com/diamondburned/gotk4/pkg/gtk/v4._gotk4_gtk4_Button_ConnectClicked(0x7ff712f360a5?, 0x7ff700000000?)
	C:/Users/Yermak/Programs/go/go-pkg/pkg/mod/github.com/diamondburned/gotk4/[email protected]/gtk/v4/gtk_export.go:2155 +0x63 fp=0xc000029bb8 sp=0xc000029b70 pc=0x7ff7131c1163
_cgoexp_b814ad42d770__gotk4_gtk4_Button_ConnectClicked(0x7ff712f75cbe?)
	_cgo_gotypes.go:65713 +0x1d fp=0xc000029bd8 sp=0xc000029bb8 pc=0x7ff7131f8f1d
runtime.cgocallbackg1(0x7ff7131f8f00, 0x39501fe810, 0x0)
	C:/Users/Yermak/Programs/go/go1.23.5/src/runtime/cgocall.go:437 +0x295 fp=0xc000029c98 sp=0xc000029bd8 pc=0x7ff712f35fd5
runtime.cgocallbackg(0x7ff7131f8f00, 0x39501fe810, 0x0)
	C:/Users/Yermak/Programs/go/go1.23.5/src/runtime/cgocall.go:350 +0x169 fp=0xc000029d30 sp=0xc000029c98 pc=0x7ff712f35c29
runtime.cgocallbackg(0x7ff7131f8f00, 0x39501fe810, 0x0)
	<autogenerated>:1 +0x2e fp=0xc000029d58 sp=0xc000029d30 pc=0x7ff712fa9e8e
runtime.cgocallback(0xc000029de8, 0x7ff712f984b2, 0x7ff71323cf00)
	C:/Users/Yermak/Programs/go/go1.23.5/src/runtime/asm_amd64.s:1084 +0xec fp=0xc000029d80 sp=0xc000029d58 pc=0x7ff712fa530c
runtime.systemstack_switch()
	C:/Users/Yermak/Programs/go/go1.23.5/src/runtime/asm_amd64.s:479 +0x8 fp=0xc000029d90 sp=0xc000029d80 pc=0x7ff712fa3548
runtime.cgocall(0x7ff71323cf00, 0xc000029e20)
	C:/Users/Yermak/Programs/go/go1.23.5/src/runtime/cgocall.go:185 +0x72 fp=0xc000029df8 sp=0xc000029d90 pc=0x7ff712f984b2
github.com/diamondburned/gotk4/pkg/gio/v2._Cfunc_g_application_run(0x16a74ed2050, 0x1, 0x16a76892000)
	_cgo_gotypes.go:14105 +0x55 fp=0xc000029e20 sp=0xc000029df8 pc=0x7ff713066775
github.com/diamondburned/gotk4/pkg/gio/v2.(*Application).Run.func3(0x16a74ed2050, 0x1, 0x16a76892000)
	C:/Users/Yermak/Programs/go/go-pkg/pkg/mod/github.com/diamondburned/gotk4/[email protected]/gio/v2/gio.go:42200 +0x67 fp=0xc000029e50 sp=0xc000029e20 pc=0x7ff7130847e7
github.com/diamondburned/gotk4/pkg/gio/v2.(*Application).Run(0xc0001798c0, {0xc000024090, 0x1, 0x1})
	C:/Users/Yermak/Programs/go/go-pkg/pkg/mod/github.com/diamondburned/gotk4/[email protected]/gio/v2/gio.go:42200 +0x1f1 fp=0xc000029ef8 sp=0xc000029e50 pc=0x7ff7130846d1
main.main()
	C:/Users/Yermak/Projects/XXX/main.go:17 +0xad fp=0xc000029f50 sp=0xc000029ef8 pc=0x7ff71322a44d
runtime.main()
	C:/Users/Yermak/Programs/go/go1.23.5/src/runtime/proc.go:272 +0x27d fp=0xc000029fe0 sp=0xc000029f50 pc=0x7ff712f6c9fd
runtime.goexit({})
	C:/Users/Yermak/Programs/go/go1.23.5/src/runtime/asm_amd64.s:1700 +0x1 fp=0xc000029fe8 sp=0xc000029fe0 pc=0x7ff712fa5581```


Other details:
Windows 11 Pro, 23H2

cpuinfo.exe
Python Version: 3.12.4.final.0 (64 bit)
Cpuinfo Version: 9.0.0
Vendor ID Raw: AuthenticAMD
Hardware Raw:
Brand Raw: AMD Ryzen 7 5800X 8-Core Processor
Hz Advertised Friendly: 3.7930 GHz
Hz Actual Friendly: 3.8010 GHz
Hz Advertised: (3793000000, 0)
Hz Actual: (3801000000, 0)
Arch: X86_64
Bits: 64
Count: 16
Arch String Raw: AMD64
L1 Data Cache Size:
L1 Instruction Cache Size:
L2 Cache Size: 4194304
L2 Cache Line Size: 512
L2 Cache Associativity: 6
L3 Cache Size: 33554432
Stepping: 2
Model: 33
Family: 25
Processor Type:
Flags: 3dnow, 3dnowprefetch, abm, adx, aes, apic, avx, avx2, bmi1, bmi2, clflush, clflushopt, clwb, cmov, cmp_legacy, cr8_legacy, cx16, cx8, de, dts, erms, f16c, fma, fpu, fxsr, ht, hypervisor, ia64,
invpcid, lahf_lm, lm, mca, mce, misalignsse, mmx, monitor, movbe, msr, mtrr, osvw, osxsave, pae, pat, pclmulqdq, perfctr_core, pge, pni, popcnt, pqe, pqm, pse, pse36, rdpid, rdrnd, rdseed, sep, sepamd
, serial, sha, smap, smep, ss, sse, sse2, sse4_1, sse4_2, sse4a, ssse3, tm, topoext, tsc, umip, vaes, vme, vpclmulqdq, wdt, xsave

yermak avatar Feb 06 '25 17:02 yermak

What exactly is "debug mode"?

diamondburned avatar Feb 08 '25 02:02 diamondburned

I'm unable to reproduce this on my end:

2025/02/07 18:12:55 Button Clicked
2025/02/07 18:12:55 Text Content: 
2025/02/07 18:12:56 Button Clicked
2025/02/07 18:12:56 Text Content: 
2025/02/07 18:12:56 Button Clicked
2025/02/07 18:12:56 Text Content: 
2025/02/07 18:12:56 Button Clicked
2025/02/07 18:12:56 Text Content: 
2025/02/07 18:12:56 Button Clicked
2025/02/07 18:12:56 Text Content: 

Information:

OS: NixOS 25.05.20250204.799ba5b (Warbler) x86_64 
Kernel: 6.13.1 
CPU: AMD Ryzen 5 7600X (12) @ 5.453GHz
go version go1.22.4 linux/amd64
gotk4 commit 5fcf61c75060a37dc3d48c64e3eb90d5eea983c4

diamondburned avatar Feb 08 '25 02:02 diamondburned