cogentcore / core

A free and open source framework for building powerful, fast, and elegant 2D and 3D apps that run on macOS, Windows, Linux, iOS, Android, and the Web with a single pure Go codebase, allowing you to Code Once, Run Everywhere.
http://cogentcore.org/core
BSD 3-Clause "New" or "Revised" License
1.31k stars 71 forks source link

filetree crash in code onshow, not clear where other path is #985

Closed rcoreilly closed 1 week ago

rcoreilly commented 1 week ago

Describe the bug

~/Library/Cogent Code/crash-logs/ > more crash_2024-06-20_02-55-13 
Platform: MacOS
System platform: MacOS
App version: dev
Core version: dev
Time: 2024-06-20 02:55:13

panic: interface conversion: tree.Node is nil, not *svg.Group

goroutine 176778 [running]:
runtime/debug.Stack()
        /opt/homebrew/Cellar/go/1.22.1/libexec/src/runtime/debug/stack.go:24 +0x64
cogentcore.org/core/system.HandleRecoverBase({0x104868600, 0x14081af8fc0})
        /Users/oreilly/go/src/cogentcore.org/core/system/recover.go:50 +0x38
cogentcore.org/core/core.HandleRecover({0x104868600, 0x14081af8fc0})
        /Users/oreilly/go/src/cogentcore.org/core/core/recover.go:33 +0x48
cogentcore.org/core/core.(*RenderWindow).EventLoop.func1()
        /Users/oreilly/go/src/cogentcore.org/core/core/renderwindow.go:442 +0x34
panic({0x104868600?, 0x14081af8fc0?})
        /opt/homebrew/Cellar/go/1.22.1/libexec/src/runtime/panic.go:770 +0x124
cogentcore.org/core/tree.New[...]({0x14000042928, 0x2?, 0x1?})
        /Users/oreilly/go/src/cogentcore.org/core/tree/admin.go:28 +0x98
cogentcore.org/core/svg.NewGroup(...)
        /Users/oreilly/go/src/cogentcore.org/core/svg/typegen.go:166
cogentcore.org/core/svg.(*SVG).UnmarshalXML(0x1402f204998, 0x1406ceb5200, {{{0x1401c25edc0, 0x1a}, {0x140594f62fa, 0x3}}, {0x140da1b4000, 0x8, 0x8}})
        /Users/oreilly/go/src/cogentcore.org/core/svg/io.go:191 +0x54e0
cogentcore.org/core/svg.(*SVG).ReadXML(0x1402f204998, {0x1049dfb00?, 0x1400aa25440?})
        /Users/oreilly/go/src/cogentcore.org/core/svg/io.go:102 +0x154
cogentcore.org/core/svg.(*SVG).OpenFS(0x1402f204998, {0x1049de3a0?, 0x1400043a948?}, {0x140594f60f0?, 0x0?})
        /Users/oreilly/go/src/cogentcore.org/core/svg/io.go:75 +0x1c0
cogentcore.org/core/core.(*Icon).SetIconTry(0x1402f204008, {0x14052037aea, 0x2})
        /Users/oreilly/go/src/cogentcore.org/core/core/icon.go:75 +0x124
cogentcore.org/core/core.(*Icon).SetIcon(0x1402f204008, {0x14052037aea, 0x2})
        /Users/oreilly/go/src/cogentcore.org/core/core/icon.go:54 +0x2c
cogentcore.org/core/core.(*Switch).Init.func3.1.3.4.1()
        /Users/oreilly/go/src/cogentcore.org/core/core/switch.go:182 +0x2c
cogentcore.org/core/core.(*WidgetBase).UpdateWidget.(*NodeBase).RunUpdaters.func1({0x140075869c0, 0x10261d2bc?, 0x14000042dd8?})
        /Users/oreilly/go/src/cogentcore.org/core/tree/plan.go:120 +0x34
cogentcore.org/core/base/tiered.(*Tiered[...]).Do(0x102ca161c, 0x1049d6f58?)
        /Users/oreilly/go/src/cogentcore.org/core/base/tiered/tiered.go:30 +0x5c
cogentcore.org/core/tree.(*NodeBase).RunUpdaters(...)
        /Users/oreilly/go/src/cogentcore.org/core/tree/plan.go:118
cogentcore.org/core/core.(*WidgetBase).UpdateWidget(0x1402f204008)
        /Users/oreilly/go/src/cogentcore.org/core/core/update.go:25 +0x50
cogentcore.org/core/core.(*WidgetBase).Update.func1({0x153f5c8d8, 0x1402f204008}, 0x2?)
        /Users/oreilly/go/src/cogentcore.org/core/core/update.go:61 +0x28
cogentcore.org/core/core.(*WidgetBase).Update.(*WidgetBase).WidgetWalkDown.func2({0x1049edbc0?, 0x1402f204008?})
        /Users/oreilly/go/src/cogentcore.org/core/core/widget.go:499 +0x38
cogentcore.org/core/tree.(*NodeBase).WalkDown(0x1402af8a008, 0x1406886c300)
        /Users/oreilly/go/src/cogentcore.org/core/tree/nodebase.go:524 +0xf0
cogentcore.org/core/core.(*WidgetBase).NodeWalkDown(...)
        /Users/oreilly/go/src/cogentcore.org/core/core/widget.go:461
cogentcore.org/core/tree.(*NodeBase).WalkDown(0x1402af82408, 0x1406886c300)
        /Users/oreilly/go/src/cogentcore.org/core/tree/nodebase.go:525 +0x114
cogentcore.org/core/core.(*WidgetBase).WidgetWalkDown(...)
        /Users/oreilly/go/src/cogentcore.org/core/core/widget.go:497
cogentcore.org/core/core.(*WidgetBase).Update(0x1402af82408)
        /Users/oreilly/go/src/cogentcore.org/core/core/update.go:60 +0xbc
cogentcore.org/core/filetree.(*Node).SetFileIcon(0x1402af82408)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:377 +0x60
cogentcore.org/core/filetree.(*Node).SetNodePath(0x1402af82408, {0x140f979f880?, 0x140d64788c0?})
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:404 +0xd0
cogentcore.org/core/filetree.(*Node).SyncDir(0x14029f5b408)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:299 +0x33c
cogentcore.org/core/filetree.(*Node).SetPath(0x14029f5b408, {0x1411ce7f300?, 0x1?})
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:266 +0x198
cogentcore.org/core/filetree.(*Node).SetNodePath(0x14029f5b408, {0x1411ce7f2c0?, 0x140096c3c80?})
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:401 +0xc8
cogentcore.org/core/filetree.(*Node).SyncDir(0x1404669ac08)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:299 +0x33c
cogentcore.org/core/filetree.(*Node).UpdateNode(0x1404669ac08)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:445 +0xe4
cogentcore.org/core/filetree.(*Node).OpenDir(0x1404669ac08)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:490 +0x38
cogentcore.org/core/filetree.(*Node).OnOpen(...)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:479
cogentcore.org/core/core.(*Tree).Open(0x1404669ac08)
        /Users/oreilly/go/src/cogentcore.org/core/core/tree.go:1162 +0x164
cogentcore.org/core/filetree.(*Node).SyncDir(0x1404669ac08)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:277 +0x58
cogentcore.org/core/filetree.(*Node).SetPath(0x1404669ac08, {0x140f85705a0?, 0x1?})
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:266 +0x198
cogentcore.org/core/filetree.(*Node).SetNodePath(0x1404669ac08, {0x140f8570450?, 0x1411e573d40?})
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:401 +0xc8
cogentcore.org/core/filetree.(*Node).SyncDir(0x140188e4808)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:299 +0x33c
cogentcore.org/core/filetree.(*Node).SetPath(0x140188e4808, {0x140b75739e0?, 0x14000043978?})
        /Users/oreilly/go/src/cogentcore.org/core/filetree/node.go:266 +0x198
cogentcore.org/core/filetree.(*Tree).UpdateAll(0x140188e4808)
        /Users/oreilly/go/src/cogentcore.org/core/filetree/tree.go:119 +0x3c
cogentcore.org/core/filetree.(*Tree).OpenPath(0x140188e4808, {0x14000481020, 0x13})
        /Users/oreilly/go/src/cogentcore.org/core/filetree/tree.go:112 +0x100
cogentcore.org/cogent/code.(*Code).UpdateFiles(0x1405c4c0008)
        /Users/oreilly/go/src/cogentcore.org/cogent/code/code.go:318 +0x38
cogentcore.org/cogent/code.(*Code).Init.func3({0x104868e00?, 0x140ecb66d50?})
        /Users/oreilly/go/src/cogentcore.org/cogent/code/code.go:134 +0x2c
cogentcore.org/core/events.(*Listeners).Call(0x14000043ac8, {0x1049fc070, 0x14019762540}, {0x14000043ab0, 0x1, 0x10266924c?})
        /Users/oreilly/go/src/cogentcore.org/core/events/listeners.go:61 +0x104
cogentcore.org/core/core.(*WidgetBase).HandleEvent.func1(0x140ecb66d50)
        /Users/oreilly/go/src/cogentcore.org/core/core/widgetevents.go:240 +0x5c
cogentcore.org/core/base/tiered.(*Tiered[...]).Do(0x30000007d, 0x14000043b48?)
        /Users/oreilly/go/src/cogentcore.org/core/base/tiered/tiered.go:30 +0x48
cogentcore.org/core/core.(*WidgetBase).HandleEvent(0x1405c4c0008, {0x1049fc070?, 0x14019762540?})
        /Users/oreilly/go/src/cogentcore.org/core/core/widgetevents.go:239 +0x124
cogentcore.org/core/core.(*WidgetBase).Send(0x1405c4c0008, 0x26, {0x0?, 0x4286f2807a07957?, 0x14000043c08?})
        /Users/oreilly/go/src/cogentcore.org/core/core/widgetevents.go:183 +0x80
cogentcore.org/core/core.(*Stages).SendShowEvents.func1({0x1049f5628?, 0x1405c4c0008?}, 0x0?)
        /Users/oreilly/go/src/cogentcore.org/core/core/stages.go:310 +0x40
cogentcore.org/core/core.(*Stages).SendShowEvents.(*WidgetBase).WidgetWalkDown.func2({0x1049eda00?, 0x1405c4c0008?})
        /Users/oreilly/go/src/cogentcore.org/core/core/widget.go:499 +0x38
cogentcore.org/core/tree.(*NodeBase).WalkDown(0x14095483108, 0x140a6c6a260)
        /Users/oreilly/go/src/cogentcore.org/core/tree/nodebase.go:524 +0xf0
cogentcore.org/core/core.(*WidgetBase).WidgetWalkDown(...)
        /Users/oreilly/go/src/cogentcore.org/core/core/widget.go:497
cogentcore.org/core/core.(*Stages).SendShowEvents(0x140238444b0?)
        /Users/oreilly/go/src/cogentcore.org/core/core/stages.go:309 +0xdc
cogentcore.org/core/core.(*RenderWindow).HandleWindowEvents(0x140238444b0, {0x1049fc430, 0x1401975c9a0})
        /Users/oreilly/go/src/cogentcore.org/core/core/renderwindow.go:506 +0x47c
cogentcore.org/core/core.(*RenderWindow).HandleEvent(0x140238444b0, {0x1049fc430, 0x1401975c9a0})
        /Users/oreilly/go/src/cogentcore.org/core/core/renderwindow.go:488 +0x158
cogentcore.org/core/core.(*RenderWindow).EventLoop(0x140238444b0)
        /Users/oreilly/go/src/cogentcore.org/core/core/renderwindow.go:456 +0x90
created by cogentcore.org/core/core.(*RenderWindow).GoStartEventLoop in goroutine 5

How to reproduce

random timing issue on opening a new project window -- need to hit with race detector to find other pathway that is going into filetree updating.

Example code

No response

Relevant output

No response

Platform

macOS

rcoreilly commented 1 week ago

pretty obvious: need to config new project, then run the new window, not the other way around.

the main problem now is that the filetree is not opening.

rcoreilly commented 1 week ago

filetree is now using new Plan / Update paradigm -- much cleaner and more robust as usual.