godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
90.26k stars 21.04k forks source link

Editor crash when deleting files #82855

Closed 2fd5 closed 11 months ago

2fd5 commented 1 year ago

Godot version

v4.1.1.stable.official (bd6af8e0ea69167dd0627f3bd54f9105bda0f8b5)

System information

Linux pop-os 6.5.4-76060504-generic, RTX3060

Issue description

When deleting folders with png files that are not used anymore by anything, editor crashes with following error message I am using editor file browser.

================================================================
handle_crash: Program crashed with signal 11
Engine version: Godot Engine v4.1.1.stable.official (bd6af8e0ea69167dd0627f3bd54f9105bda0f8b5)
Dumping the backtrace. Please include this when reporting the bug to the project developer.
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x42520) [0x7f129fc42520] (??:0)
[2] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0x1ffe729] (??:0)
[3] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0x1f65299] (??:0)
[4] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0x2d8cfe1] (??:0)
[5] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0x483b9d1] (??:0)
[6] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0x2d5ce11] (??:0)
[7] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0x2d5d45d] (??:0)
[8] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0xf15aab] (??:0)
[9] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0xe46444] (??:0)
[10] /lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7f129fc29d90] (??:0)
[11] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x7f129fc29e40] (??:0)
[12] /home/user/.local/bin/Godot_v4.1.1-stable_linux.x86_64() [0xe777ae] (??:0)
-- END OF BACKTRACE --
================================================================

I am unsure are there any more specific conditions that has to be met to trigger this issue I had folders with animation frames that were used by AnimatedSprite2D. PNG 1k, maybe 60 frames or more.

Steps to reproduce

There must be more then just deleting png's as in small example project I am unable to reproduce. I will try to figure out what is necessary, but wanted to report it anyways.

Minimal reproduction project

not available

KoBeWi commented 1 year ago

Check in 4.2 dev6. There were recent fixes for similar issues.

noidexe commented 1 year ago

I'm having the same issue on 4.2-dev6

It doesn't always happen and I'm still not sure if the main trigger is deleting many files, big files or folders with subfolders

astillich commented 1 year ago

I tried to reproduce this on the master branch, but I couldn't get it to crash. Can somebody provide a reproduction case?

noidexe commented 1 year ago

I'm testing it on a dev build from master and I cannot get it to crash even when removing files that have owners. I'll keep trying and see if I can get a backtrace.

noidexe commented 1 year ago

Ok got it to crash after deleting several folders:

================================================================
   at: (core\io\resource_loader.cpp:275)
CrashHandlerException: Program crashed
ERROR:Engine version: Godot Engine v4.2.beta.custom_build (51f81e1c88499f04d2ebdcc0be0b34e73f5e90eb)
 Cannot open file 'res://CastleNew/materials/bricksloose.tres'.
Dumping the backtrace. Please include this when reporting the bug to the project developer.
   at: (scene\resources\resource_format_text.cpp:1641)
ERROR: Failed loading resource: res://CastleNew/materials/bricksloose.tres. Make sure resources have been imported by opening the project in the editor at least once.
   at: (core\io\resource_loader.cpp:275)
WARNING: Upgrading mesh from older surface format. Once saved again (or re-imported), this mesh will be incompatible with earlier versions of Godot.
     at: RenderingServer::_fix_surface_compatibility (servers\rendering_server.cpp:2035)
WARNING: Upgrading mesh from older surface format. Once saved again (or re-imported), this mesh will be incompatible with earlier versions of Godot.
     at: RenderingServer::_fix_surface_compatibility (servers\rendering_server.cpp:2035)
WARNING: Upgrading mesh from older surface format. Once saved again (or re-imported), this mesh will be incompatible with earlier versions of Godot.
     at: RenderingServer::_fix_surface_compatibility (servers\rendering_server.cpp:2035)
WARNING: Upgrading mesh from older surface format. Once saved again (or re-imported), this mesh will be incompatible with earlier versions of Godot.
     at: RenderingServer::_fix_surface_compatibility (servers\rendering_server.cpp:2035)
[0] EditorResourceTooltipPlugin::make_default_tooltip (C:\Users\lisan\Documents\GitHub\godot\editor\plugins\editor_resource_tooltip_plugins.cpp:68)
[1] EditorResourceTooltipPlugin::make_default_tooltip (C:\Users\lisan\Documents\GitHub\godot\editor\plugins\editor_resource_tooltip_plugins.cpp:68)
[2] FileSystemDock::create_tooltip_for_path (C:\Users\lisan\Documents\GitHub\godot\editor\filesystem_dock.cpp:2508)
[3] FileSystemTree::make_custom_tooltip (C:\Users\lisan\Documents\GitHub\godot\editor\filesystem_dock.cpp:70)
[4] Viewport::_gui_show_tooltip (C:\Users\lisan\Documents\GitHub\godot\scene\main\viewport.cpp:1504)
[5] call_with_variant_args_helper<Viewport> (C:\Users\lisan\Documents\GitHub\godot\core\variant\binder_common.h:308)
[6] call_with_variant_args<Viewport> (C:\Users\lisan\Documents\GitHub\godot\core\variant\binder_common.h:418)
[7] CallableCustomMethodPointer<Viewport>::call (C:\Users\lisan\Documents\GitHub\godot\core\object\callable_method_pointer.h:105)
[8] Callable::callp (C:\Users\lisan\Documents\GitHub\godot\core\variant\callable.cpp:58)
[9] Object::emit_signalp (C:\Users\lisan\Documents\GitHub\godot\core\object\object.cpp:1127)
[10] Object::emit_signal<> (C:\Users\lisan\Documents\GitHub\godot\core\object\object.h:920)
[11] SceneTree::process_timers (C:\Users\lisan\Documents\GitHub\godot\scene\main\scene_tree.cpp:584)
[12] SceneTree::process (C:\Users\lisan\Documents\GitHub\godot\scene\main\scene_tree.cpp:520)
[13] Main::iteration (C:\Users\lisan\Documents\GitHub\godot\main\main.cpp:3602)
[14] OS_Windows::run (C:\Users\lisan\Documents\GitHub\godot\platform\windows\os_windows.cpp:1474)
[15] widechar_main (C:\Users\lisan\Documents\GitHub\godot\platform\windows\godot_windows.cpp:182)
[16] _main (C:\Users\lisan\Documents\GitHub\godot\platform\windows\godot_windows.cpp:204)
[17] main (C:\Users\lisan\Documents\GitHub\godot\platform\windows\godot_windows.cpp:218)
[18] WinMain (C:\Users\lisan\Documents\GitHub\godot\platform\windows\godot_windows.cpp:232)
[19] __scrt_common_main_seh (d:\agent\_work\4\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288)
[20] <couldn't map PC to fn name>
-- END OF BACKTRACE --
================================================================
KoBeWi commented 1 year ago

@noidexe The crash you got comes from dock trying to make a tooltip for a file that does not exist. It's easy to prevent it, but it would be useful if you could find some easy way to test it.

noidexe commented 1 year ago

@KoBeWi the project I'm using is under NDA but I'll try with some Kenney assets. It's pretty random but I never got it to happen when deleting a folder with only a few files. I'm thinking the repro steps could be:

I'm not at my work PC right now but I'll test it later.

KoBeWi commented 1 year ago

That's what I assumed, but for me the editor is frozen while the file is being deleted, so there is no way to spawn a tooltip. I requested minimal project, because maybe it's something project-specific.

noidexe commented 1 year ago

I'm currently letting godot import assets for a sample project hosted on an old hard drive acessed over the network. I want to check if I can consistently trigger the bug with slow enough read speeds.

In any case, is there any reason to do a FileAcess::open() without checking for errors? There are many situations where a file read could fail and that shouldn't result in an editor crash (with potential loss of progress).

This is how the code looks currently:

    {
        Ref<FileAccess> f = FileAccess::open(p_resource_path, FileAccess::READ);
        Label *label = memnew(Label(vformat(TTR("Size: %s"), String::humanize_size(f->get_length()))));
        vb->add_child(label);
    }

https://github.com/godotengine/godot/blob/3bc1c9b5e087c73f63a43481d976b1156afe78d5/editor/plugins/editor_resource_tooltip_plugins.cpp#L67C6-L67C6

I don't have that much experience with C++ but based on how file acess is handled in other parts of the editor I think it should look something like this:

    {
        uint64_t size = 0;
        Error err;
        Ref<FileAccess> f = FileAccess::open(p_resource_path, FileAccess::READ, &err);
        if (err == OK) {
            size = f->get_length();
        } else {
            ERR_PRINT("Couldn't load file '" + p_resource_path + "', error code " + itos(err) + ".");
        }
        Label *label = memnew(Label(vformat(TTR("Size: %s"), String::humanize_size(size))));
        vb->add_child(label);
    }
KoBeWi commented 1 year ago

In any case, is there any reason to do a FileAcess::open() without checking for errors?

The code assumes that the file state in FileSystemDock is up-to-date (which is true in most cases). But in any case, the fix should be higher, in create_tooltip_for_path() method. I actually have a PR ready, but couldn't reproduce the bug.

noidexe commented 1 year ago

Ok using the slower disk I got the MRP using kenney assets to crash consistently, though I got a different error:

Moving to trash: P:/DeleteCrashMRP/kenney_retro-medieval-kit/Isometric/
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/battlement_half_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/battlement_half_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/battlement_half_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/battlement_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/battlement_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/battlement_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/battlement_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/columnPaint_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/columnPaint_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/columnPaint_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/columnPaint_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/column_damaged_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/column_damaged_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/column_damaged_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/column_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/column_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/column_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_barrel_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_barrel_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_barrel_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_barrel_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_crateSmall_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_crateSmall_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_crateSmall_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_crate_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_crate_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_crate_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/detail_crate_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/fence_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/fence_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_flat_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_flat_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_flat_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_flat_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stairsCornerInner_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stairsCornerInner_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stairsCornerInner_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stairsCornerInner_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stairsCornerOuter_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stairsCornerOuter_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stairsCornerOuter_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stairs_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stepsCornerInner_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stepsCornerInner_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stepsCornerInner_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stepsCornerInner_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stepsCornerOuter_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stepsCornerOuter_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_stepsCornerOuter_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_steps_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_steps_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_steps_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_steps_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/floor_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_fence_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_fence_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_fence_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_round_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_round_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_round_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/overhang_round_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/roof_corner_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/roof_corner_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/roof_edge_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/roof_edge_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/roof_edge_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/roof_edge_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/roof_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/roof_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_poles_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_poles_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_poles_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_poles_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_wall_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_wall_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_wall_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/structure_wall_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/towerPaint_base_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/towerPaint_base_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/towerPaint_base_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/towerPaint_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/towerPaint_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_base_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_base_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_base_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_base_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_edge_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_edge_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_top_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/tower_top_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortifiedPaint_gate_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortifiedPaint_gate_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortifiedPaint_gate_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortifiedPaint_half_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortifiedPaint_half_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortifiedPaint_half_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortifiedPaint_half_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortifiedPaint_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_gateHalf_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_gate_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_gate_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_gate_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_gate_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_half_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_half_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallFortified_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_detail_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_detail_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_detail_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_detail_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_flat_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_gate_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_gate_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_gate_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_half_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_half_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_half_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_half_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wallPaint_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_detail_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_detail_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_detail_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_detail_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_flatGate_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_flatGate_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_flat_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_gateHalf_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_gateHalf_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_gateHalf_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_gateHalf_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_gate_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_gate_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_half_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_half_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_half_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_low_NE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_low_NW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_low_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_low_SW.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_SE.png
Failed to get modified time for: res://kenney_retro-medieval-kit/Isometric/wall_SW.png
ERROR: Condition "!res.is_valid()" is true. Returning: ERR_CANT_OPEN
   at: load_resource (editor\editor_node.cpp:1193)
ERROR: Cannot navigate to 'res://kenney_retro-medieval-kit/Isometric/battlement_cornerOuter_NE.png' as it has not been found in th!   at: (editor\filesystem_dock.cpp:726)
ERROR: Condition "!res.is_valid()" is true. Returning: ERR_CANT_OPEN
   at: load_resource (editor\editor_node.cpp:1193)
ERROR: Cannot navigate to 'res://kenney_retro-medieval-kit/Isometric/battlement_cornerOuter_NE.png' as it has not been found in th!   at: (editor\filesystem_dock.cpp:726)
ERROR: Condition "!res.is_valid()" is true. Returning: ERR_CANT_OPEN
   at: load_resource (editor\editor_node.cpp:1193)
ERROR: Cannot navigate to 'res://kenney_retro-medieval-kit/Isometric/battlement_cornerOuter_NE.png' as it has not been found in th!   at: (editor\filesystem_dock.cpp:726)
ERROR: Condition "!res.is_valid()" is true. Returning: ERR_CANT_OPEN
   at: load_resource (editor\editor_node.cpp:1193)
ERROR: Cannot navigate to 'res://kenney_retro-medieval-kit/Isometric/battlement_cornerOuter_NE.png' as it has not been found in th!   at: (editor\filesystem_dock.cpp:726)

Repro steps:

I assume the problem is the click gets processed before the filesystem dock is updated to reflect the new state of the project directory. It might be the same for the tooltip timer. If that's the cause maybe the dock can be marked as dirty/invalid and prevent any interactions until the I/O operations have finished and project tree is up to date.

As to why it's hard to reproduce, I'm guessing if delete operation is fast enough the dock gets updated before the tooltip timer runs out or before you have a chance to click on anything.

Here's the MRP. It's just a new project with default settings and some assets inside.

DeleteCrashMRP.zip

noidexe commented 1 year ago

Ok I got it to fail consistently on my SSD too. When I get the delete confirmation dialog I hover over the first file under the folder I'm deleting, press enter to confirm and click immediately after that. I'm pretty convinced the tooltip crash depends on whether the delete operation takes more or less than 0.5 seconds.

2fd5 commented 1 year ago

That is interesting, there might be something with hover. I noticed crashes when in debug, hovering over a variable in Godot 4 editor crashed my system with weird graphical glitch, like squares filling the screen. Like something was writing to graphical buffer. I understand that is a separate issue, but just though I let you know.

noidexe commented 1 year ago

I built the editor from #83487 and I haven't been able to make it crash any more. On the slow networked filesystem, what I noticed is that after Windows deletes the files and before Godot updates the filesystem dock I got several seconds where I could still see the deleted files listed in the dock and interact with them.

Instead of a crash I got toasts with the error check KoBeWi added

ERROR: Cannot navigate to 'res://kenney_retro-medieval-kit/Isometric/battlement_cornerInner_NE.png' as it has not been found in the file system!
   at: (editor\filesystem_dock.cpp:726)
ERROR: Condition "!FileAccess::exists(p_path)" is true. Returning: nullptr
   at: create_tooltip_for_path (editor\filesystem_dock.cpp:2506)

Eventually the editor freezes again for a brief moment and the file tree gets updated.