pkdawson / imgui-godot

Dear ImGui plugin for Godot 4
MIT License
429 stars 24 forks source link

Viewports: crash when window input received after Window is destroyed #71

Closed pkdawson closed 3 months ago

pkdawson commented 3 months ago

Usually triggered when repeatedly opening and closing the metrics window from the demo window.

=================================================================
==74717==ERROR: AddressSanitizer: heap-use-after-free on address 0x000128d56d98 at pc 0x000108368934 bp 0x00016fdf92b0 sp 0x00016fdf92a8
READ of size 4 at 0x000128d56d98 thread T0
    #0 0x108368930 in Node::is_readable_from_caller_thread() const node.h:599
    #1 0x10889f45c in Window::get_position() const window.cpp:365
    #2 0x10876f8f0 in Viewport::_update_mouse_over() viewport.cpp:3010
    #3 0x1087738c0 in Viewport::push_input(Ref<InputEvent> const&, bool) viewport.cpp:3241
    #4 0x1088bbdf0 in Window::_window_input(Ref<InputEvent> const&) window.cpp:1690
    #5 0x1089232c4 in void call_with_variant_args_helper<Window, Ref<InputEvent> const&, 0ul>(Window*, void (Window::*)(Ref<InputEvent> const&), Variant const**, Callable::CallError&, IndexSequence<0ul>) binder_common.h:304
    #6 0x108922f54 in void call_with_variant_args<Window, Ref<InputEvent> const&>(Window*, void (Window::*)(Ref<InputEvent> const&), Variant const**, int, Callable::CallError&) binder_common.h:418
    #7 0x108922984 in CallableCustomMethodPointer<Window, Ref<InputEvent> const&>::call(Variant const**, int, Variant&, Callable::CallError&) const callable_method_pointer.h:103
    #8 0x110eefff0 in Callable::callp(Variant const**, int, Variant&, Callable::CallError&) const callable.cpp:57
    #9 0x100419094 in Variant Callable::call<Ref<InputEvent>>(Ref<InputEvent>) const variant.h:875
    #10 0x1004186ac in DisplayServerMacOS::_dispatch_input_event(Ref<InputEvent> const&) display_server_macos.mm:385
    #11 0x100417f78 in DisplayServerMacOS::_dispatch_input_events(Ref<InputEvent> const&) display_server_macos.mm:357
    #12 0x110d651f4 in Input::_parse_input_event_impl(Ref<InputEvent> const&, bool) input.cpp:773
    #13 0x110d5b464 in Input::flush_buffered_events() input.cpp:1052
    #14 0x100468b5c in DisplayServerMacOS::process_events() display_server_macos.mm:3034
    #15 0x1003f3668 in OS_MacOS::run() os_macos.mm:774
    #16 0x100510a2c in main godot_main_macos.mm:84
    #17 0x195b5e0dc  (<unknown module>)

0x000128d56d98 is located 792 bytes inside of 3448-byte region [0x000128d56a80,0x000128d577f8)
freed by thread T0 here:
    #0 0x124a3f260 in wrap_free+0x98 (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x53260)
    #1 0x1105e3984 in Memory::free_static(void*, bool) memory.cpp:168
    #2 0x1005b97f8 in void memdelete<Object>(Object*) memory.h:119
    #3 0x10867fa7c in SceneTree::_flush_delete_queue() scene_tree.cpp:1366
    #4 0x108680178 in SceneTree::process(double) scene_tree.cpp:532
    #5 0x1005bd7bc in Main::iteration() main.cpp:4104
    #6 0x1003f36dc in OS_MacOS::run() os_macos.mm:778
    #7 0x100510a2c in main godot_main_macos.mm:84
    #8 0x195b5e0dc  (<unknown module>)

previously allocated by thread T0 here:
    #0 0x124a3f124 in wrap_malloc+0x94 (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x53124)
    #1 0x1105e2e94 in Memory::alloc_static(unsigned long, bool) memory.cpp:75
    #2 0x1105e2d38 in operator new(unsigned long, char const*) memory.cpp:40
    #3 0x1082842c8 in Object* ClassDB::creator<Window>() class_db.h:145
    #4 0x111efcc88 in ClassDB::_instantiate_internal(StringName const&, bool) class_db.cpp:533
    #5 0x111efeba8 in ClassDB::instantiate_no_placeholders(StringName const&) class_db.cpp:542
    #6 0x111ed3b74 in gdextension_classdb_construct_object(void const*) gdextension_interface.cpp:1520
    #7 0x12feecebc in godot::Wrapped::Wrapped(godot::StringName) wrapped.cpp:78
    #8 0x12fcc4560 in godot::Object::Object(char const*) object.hpp:51
    #9 0x12fd92fd4 in godot::Node::Node(char const*) node.hpp:61
    #10 0x12fdc28e4 in godot::Viewport::Viewport(char const*) viewport.hpp:63
    #11 0x12fdc2898 in godot::Window::Window(char const*) window.hpp:59
    #12 0x12fdc2854 in godot::Window::Window() window.hpp:59
    #13 0x12fdc2814 in ImGui::Godot::ImGuiWindow::ImGuiWindow() Viewports.h:11
    #14 0x12fdc264c in ImGui::Godot::ImGuiWindow::ImGuiWindow() Viewports.h:11
    #15 0x12fdc1c0c in ImGui::Godot::Godot_CreateWindow(ImGuiViewport*) Viewports.cpp:44
    #16 0x12fe12f50 in ImGui::UpdatePlatformWindows() imgui.cpp:15624
    #17 0x12fc3cd08 in ImGui::Godot::Context::Render() Context.cpp:141
    #18 0x12fd921c0 in ImGui::Godot::ImGuiController::_process(double) ImGuiController.cpp:129
    #19 0x12fdc97f4 in void godot::call_with_ptr_args_helper<ImGui::Godot::ImGuiController, double, 0ul>(ImGui::Godot::ImGuiController*, void (ImGui::Godot::ImGuiController::*)(double), void const* const*, IndexSequence<0ul>) binder_common.hpp:194
    #20 0x12fdc9750 in void godot::call_with_ptr_args<ImGui::Godot::ImGuiController, double>(ImGui::Godot::ImGuiController*, void (ImGui::Godot::ImGuiController::*)(double), void const* const*, void*) binder_common.hpp:214
    #21 0x12fdc96f0 in void godot::Node::register_virtuals<ImGui::Godot::ImGuiController, godot::Node>()::'lambda'(void*, void const* const*, void*)::operator()(void*, void const* const*, void*) const node.hpp:293
    #22 0x12fdc96a0 in void godot::Node::register_virtuals<ImGui::Godot::ImGuiController, godot::Node>()::'lambda'(void*, void const* const*, void*)::__invoke(void*, void const* const*, void*) node.hpp:293
    #23 0x108559b0c in bool Node::_gdvirtual__process_call<false>(double) node.h:351
    #24 0x108556a00 in Node::_notification(int) node.cpp:55
    #25 0x100e66290 in Node::_notificationv(int, bool) node.h:50
    #26 0x111f5f6c4 in Object::notification(int, bool) object.cpp:870
    #27 0x108685c40 in SceneTree::_process_group(SceneTree::ProcessGroup*, bool) scene_tree.cpp:962
    #28 0x10867e608 in SceneTree::_process(bool) scene_tree.cpp:1039
    #29 0x108680158 in SceneTree::process(double) scene_tree.cpp:526

SUMMARY: AddressSanitizer: heap-use-after-free node.h:599 in Node::is_readable_from_caller_thread() const
Shadow bytes around the buggy address:
  0x000128d56b00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d56b80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d56c00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d56c80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d56d00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x000128d56d80: fd fd fd[fd]fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d56e00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d56e80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d56f00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d56f80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000128d57000: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==74717==ABORTING
(lldb) AddressSanitizer report breakpoint hit. Use 'thread info -s' to get extended information about the report.
Process 74717 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = Use of deallocated memory
    frame #0: 0x0000000124a49060 libclang_rt.asan_osx_dynamic.dylib`__asan::AsanDie()
libclang_rt.asan_osx_dynamic.dylib`__asan::AsanDie:
->  0x124a49060 <+0>:  pacibsp 
    0x124a49064 <+4>:  stp    x20, x19, [sp, #-0x20]!
    0x124a49068 <+8>:  stp    x29, x30, [sp, #0x10]
    0x124a4906c <+12>: add    x29, sp, #0x10
Target 0: (godot.macos.editor.dev.arm64.san.mono) stopped.
pkdawson commented 3 months ago

On Windows, possibly related (similar reproduction steps, even without WIP topmost window), but crashes in driver:


EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 00007ffd1a8d24a8 (nvwgf2umx!OpenAdapter10+0x0000000000176548)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000000
   Parameter[1]: 0000000000000008
Attempt to read from address 0000000000000008

FAULTING_THREAD:  0000b7f4

PROCESS_NAME:  godot.windows.editor.dev.x86_64.mono.exe

READ_ADDRESS:  0000000000000008 

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.

EXCEPTION_CODE_STR:  c0000005

EXCEPTION_PARAMETER1:  0000000000000000

EXCEPTION_PARAMETER2:  0000000000000008

STACK_TEXT:  
0000009b`6a1fd020 00007ffd`1a8e42fb     : 0000023f`c35e8170 0000009b`6a1fd160 00000000`00000000 0000023f`c3338400 : nvwgf2umx!OpenAdapter10+0x176548
0000009b`6a1fd060 00007ffd`1a828e6b     : 0000533a`799a9b6f 00007ffd`50000163 0000023f`c35e80d0 0000009b`6a1fd970 : nvwgf2umx!OpenAdapter12+0x40db
0000009b`6a1fd2e0 00007ffd`1a8eaa55     : 0000009b`6a1fde20 00000000`00000000 00000000`000000d0 00000000`00000000 : nvwgf2umx!OpenAdapter10+0xccf0b
0000009b`6a1fd320 00007ffd`1a8fe6bc     : 0000023f`c2c840f0 0000009b`6a1fde20 0000023f`c2c840f0 00007ffd`1dc4aa30 : nvwgf2umx!OpenAdapter12+0xa835
0000009b`6a1fd3b0 00007ffc`c473eeb4     : 00000000`00000000 00000000`00000001 0000009b`6a1fde20 00000000`000000be : nvwgf2umx!OpenAdapter12+0x1e49c
0000009b`6a1fd420 00007ffc`c4757d4c     : 0000023f`85124cb0 00000000`00000000 00000000`00000000 00007ffd`33fa0000 : D3D12Core!TableFunctionTraits<1>::Detail::CommandListInvokerImpl<TableFunctionTraitsImpl<1>::FunctionTraits<52,27,void>,void,D3D12DDI_HCOMMANDLIST,D3D12DDI_HCOMMANDQUEUE,D3D12DDIARG_PRESENT_0001 const * __ptr64,D3D12DDI_PRESENT_0051 * __ptr64,D3D12DDI_PRESENT_CONTEXTS_0051 * __ptr64,D3D12DDI_PRESENT_HWQUEUES_0051 * __ptr64>::Call+0x60
0000009b`6a1fd460 00007ffc`c4742f93     : 0000023f`c3568c90 00000000`00000002 0000023f`c3568720 00000000`00000005 : D3D12Core!CGraphicsCommandList::VersionedPresent+0x80
0000009b`6a1fd920 00007ffd`2e85453f     : 0000023f`c2c83ea0 00000000`00000191 0000009b`6a1fea20 0000023f`c3568720 : D3D12Core!CGraphicsCommandList::Present+0x433
0000009b`6a1fe090 00007ffd`2e801357     : 0000023f`c3568720 0000009b`6a1fe2d8 0000023f`00000001 00000000`00000000 : dxgi!CD3D12Device::PresentExtended+0x453
0000009b`6a1fe220 00007ffd`2e7d37af     : 0000023f`c35e4a10 0000009b`6a1fea20 0000009b`00000001 00000000`00000000 : dxgi!CDXGISwapChain::DeviceInternalPresent+0x2f84f
0000009b`6a1fe280 00007ffd`2e7d350a     : 0000023f`c35e4a10 0000023f`c35e4a10 00000000`00000200 0000023f`c34ffa40 : dxgi!CFlipPresentToDWM<CDXGISwapChainWrapper>::FlipPresentCore+0x1ef
0000009b`6a1fe920 00007ffd`2e7e73f9     : 0000023f`bc680000 00000000`00000000 0000009b`6a1ff900 00000000`00000000 : dxgi!CDXGISwapChain::FlipPresentToDWM+0x8ea
0000009b`6a1fefc0 00007ffd`2e7e6580     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : dxgi!CDXGISwapChain::PresentImplCore+0xd79
0000009b`6a1ff8b0 00007ffd`2e8047a6     : 00000000`00000000 0000023f`c35e4a10 0000009b`6a1ff999 00000000`00000200 : dxgi!CDXGISwapChain::PresentImpl+0xd0
0000009b`6a1ff950 00007ffc`a9addca3     : 0000023f`c361d2f0 0000023f`c3426090 00000000`00001772 0000023f`c3426090 : dxgi!CDXGISwapChain::Present+0xa6
0000009b`6a1ffa00 00007ffc`a971cb28     : 0000023f`85848340 00000000`00000000 00000000`00000000 00000000`00000000 : nvoglv64!vk_optimusGetInstanceProcAddr+0x3d173
0000009b`6a1ffa40 00007ffd`32e7257d     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nvoglv64!DrvValidateVersion+0xdeb8
0000009b`6a1ffa70 00007ffd`33f4af28     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x1d
0000009b`6a1ffaa0 00000000`00000000     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x28

SYMBOL_NAME:  nvwgf2umx+176548

MODULE_NAME: nvwgf2umx

IMAGE_NAME:  nvwgf2umx.dll

STACK_COMMAND:  dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~41s ; .cxr ; kb

FAILURE_BUCKET_ID:  NULL_CLASS_PTR_READ_c0000005_nvwgf2umx.dll!Unknown
pkdawson commented 3 months ago

Also sometimes just freezes like this:

 # Child-SP          RetAddr               Call Site
00 000000da`8d1fe1e8 00007ffd`31465ef9     ntdll!NtWaitForMultipleObjects+0x14
01 000000da`8d1fe1f0 00007ffd`31465dfe     KERNELBASE!WaitForMultipleObjectsEx+0xe9
02 000000da`8d1fe4d0 00007ffc`a9bc3ef2     KERNELBASE!WaitForMultipleObjects+0xe
03 000000da`8d1fe510 00007ffc`a9bc3c1a     nvoglv64!vkGetInstanceProcAddr+0xc1f92
04 000000da`8d1fe570 00007ffc`a9b0303d     nvoglv64!vkGetInstanceProcAddr+0xc1cba
05 000000da`8d1fe5f0 00007ffc`c37de6dd     nvoglv64!vkGetInstanceProcAddr+0x10dd
06 000000da`8d1fe630 00007ff6`6959127b     vulkan_1!vkResetEvent+0x4f37d
07 000000da`8d1fe670 00007ff6`695d32d2     godot_windows_editor_dev_x86_64_mono!VulkanContext::prepare_buffers+0x7b [C:\git\godot\drivers\vulkan\vulkan_context.cpp @ 2427] 
08 000000da`8d1fe760 00007ff6`6bdba9b6     godot_windows_editor_dev_x86_64_mono!RenderingDeviceVulkan::prepare_screen_for_drawing+0x32 [C:\git\godot\drivers\vulkan\rendering_device_vulkan.cpp @ 8950] 
09 000000da`8d1fe7a0 00007ff6`6c472cc0     godot_windows_editor_dev_x86_64_mono!RendererCompositorRD::prepare_for_blitting_render_targets+0x26 [C:\git\godot\servers\rendering\renderer_rd\renderer_compositor_rd.cpp @ 37] 
0a 000000da`8d1fe7e0 00007ff6`6bf4c674     godot_windows_editor_dev_x86_64_mono!RendererViewport::draw_viewports+0x1340 [C:\git\godot\servers\rendering\renderer_viewport.cpp @ 823] 
0b 000000da`8d1feee0 00007ff6`6bf4d82b     godot_windows_editor_dev_x86_64_mono!RenderingServerDefault::_draw+0x1b4 [C:\git\godot\servers\rendering\rendering_server_default.cpp @ 92] 
0c 000000da`8d1ff240 00007ff6`6834c613     godot_windows_editor_dev_x86_64_mono!RenderingServerDefault::draw+0xbb [C:\git\godot\servers\rendering\rendering_server_default.cpp @ 387] 
0d 000000da`8d1ff2a0 00007ff6`682e34c6     godot_windows_editor_dev_x86_64_mono!Main::iteration+0x9b3 [C:\git\godot\main\main.cpp @ 3694] 
0e 000000da`8d1ff670 00007ff6`682d5741     godot_windows_editor_dev_x86_64_mono!OS_Windows::run+0x66 [C:\git\godot\platform\windows\os_windows.cpp @ 1474] 
0f 000000da`8d1ff6b0 00007ff6`682d5823     godot_windows_editor_dev_x86_64_mono!widechar_main+0x201 [C:\git\godot\platform\windows\godot_windows.cpp @ 180] 
10 000000da`8d1ffa30 00007ff6`682d5862     godot_windows_editor_dev_x86_64_mono!_main+0x43 [C:\git\godot\platform\windows\godot_windows.cpp @ 204] 
11 000000da`8d1ffa70 00007ff6`682d520d     godot_windows_editor_dev_x86_64_mono!main+0x12 [C:\git\godot\platform\windows\godot_windows.cpp @ 218] 
12 000000da`8d1ffab0 00007ff6`6d328466     godot_windows_editor_dev_x86_64_mono!WinMain+0x2d [C:\git\godot\platform\windows\godot_windows.cpp @ 232] 
13 (Inline Function) --------`--------     godot_windows_editor_dev_x86_64_mono!invoke_main+0x21 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 102] 
14 000000da`8d1ffae0 00007ffd`32e7257d     godot_windows_editor_dev_x86_64_mono!__scrt_common_main_seh+0x106 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 288] 
15 000000da`8d1ffb20 00007ffd`33f4af28     KERNEL32!BaseThreadInitThunk+0x1d
16 000000da`8d1ffb50 00000000`00000000     ntdll!RtlUserThreadStart+0x28
pkdawson commented 3 months ago

OK finally got basically the same thing on Windows:


EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 00007ffd33ff705e (ntdll!RtlpBreakPointHeap+0x0000000000000016)
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 1
   Parameter[0]: 0000000000000000

FAULTING_THREAD:  00008c4c

PROCESS_NAME:  godot.windows.editor.dev.x86_64.mono.exe

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION}  Breakpoint  A breakpoint has been reached.

EXCEPTION_CODE_STR:  80000003

EXCEPTION_PARAMETER1:  0000000000000000

ADDITIONAL_DEBUG_TEXT:  Enable Pageheap/AutoVerifer ; Followup set based on attribute [Is_ChosenCrashFollowupThread] from Frame:[0] on thread:[PSEUDO_THREAD]

STACK_TEXT:  
00000000`00000000 00000000`00000000 heap_corruption!godot.windows.editor.dev.x86_64.mono.exe+0x0

STACK_COMMAND:  ** Pseudo Context ** ManagedPseudo ** Value: ffffffff ** ; kb

SYMBOL_NAME:  heap_corruption!godot.windows.editor.dev.x86_64.mono.exe

MODULE_NAME: heap_corruption

IMAGE_NAME:  heap_corruption

FAILURE_BUCKET_ID:  HEAP_CORRUPTION_80000003_heap_corruption!godot.windows.editor.dev.x86_64.mono.exe

OS_VERSION:  10.0.22621.1

BUILDLAB_STR:  ni_release

OSPLATFORM_TYPE:  x64

OSNAME:  Windows 10

FAILURE_ID_HASH:  {713b1007-129a-d95e-0c73-37fb4d27af1f}

Followup:     MachineOwner
---------

0:000> k
 # Child-SP          RetAddr               Call Site
00 00000031`5e5fb1b8 00007ffd`33f3080b     ntdll!RtlpBreakPointHeap+0x16
01 00000031`5e5fb1c0 00007ffd`33f2d239     ntdll!RtlpAllocateHeap+0x16db
02 00000031`5e5fb420 00007ffd`33ff45c2     ntdll!RtlpAllocateHeapInternal+0x6c9
03 00000031`5e5fb520 00007ffd`33fadf1a     ntdll!RtlDebugAllocateHeap+0x102
04 00000031`5e5fb5c0 00007ffd`33f2d239     ntdll!RtlpAllocateHeap+0x7edea
05 00000031`5e5fb820 00007ff6`6d3a1438     ntdll!RtlpAllocateHeapInternal+0x6c9
06 00000031`5e5fb920 00007ff6`6c6c3645     godot_windows_editor_dev_x86_64_mono!_malloc_base+0x44 [minkernel\crts\ucrt\src\appcrt\heap\malloc_base.cpp @ 34] 
07 00000031`5e5fb950 00007ff6`6c6c3a0a     godot_windows_editor_dev_x86_64_mono!Memory::alloc_static+0x45 [C:\git\godot\core\os\memory.cpp @ 75] 
08 00000031`5e5fb9c0 00007ff6`6a75937a     godot_windows_editor_dev_x86_64_mono!operator new+0x1a [C:\git\godot\core\os\memory.cpp @ 41] 
09 00000031`5e5fb9f0 00007ff6`6a73d685     godot_windows_editor_dev_x86_64_mono!Ref<SceneTreeTimer>::instantiate+0x1a [C:\git\godot\core\object\ref_counted.h @ 216] 
0a 00000031`5e5fba40 00007ff6`6a7a3ee5     godot_windows_editor_dev_x86_64_mono!SceneTree::create_timer+0x45 [C:\git\godot\scene\main\scene_tree.cpp @ 1458] 
0b 00000031`5e5fbab0 00007ff6`6a7c0023     godot_windows_editor_dev_x86_64_mono!Viewport::_gui_input_event+0x1425 [C:\git\godot\scene\main\viewport.cpp @ 1983] 
0c 00000031`5e5fc810 00007ff6`6a7ffb20     godot_windows_editor_dev_x86_64_mono!Viewport::push_input+0x4a3 [C:\git\godot\scene\main\viewport.cpp @ 3366] 
0d 00000031`5e5fc8e0 00007ff6`6a82cd40     godot_windows_editor_dev_x86_64_mono!Window::_window_input+0x4b0 [C:\git\godot\scene\main\window.cpp @ 1567] 
0e 00000031`5e5fea60 00007ff6`6a82a6a4     godot_windows_editor_dev_x86_64_mono!call_with_variant_args_helper<Window,Ref<InputEvent> const &,0>+0x50 [C:\git\godot\core\variant\binder_common.h @ 303] 
0f 00000031`5e5feaa0 00007ff6`6a83ee3a     godot_windows_editor_dev_x86_64_mono!call_with_variant_args<Window,Ref<InputEvent> const &>+0x94 [C:\git\godot\core\variant\binder_common.h @ 417] 
10 00000031`5e5feaf0 00007ff6`6c81ab40     godot_windows_editor_dev_x86_64_mono!CallableCustomMethodPointer<Window,Ref<InputEvent> const &>::call+0x12a [C:\git\godot\core\object\callable_method_pointer.h @ 98] 
11 00000031`5e5feb70 00007ff6`6830a4b6     godot_windows_editor_dev_x86_64_mono!Callable::callp+0x170 [C:\git\godot\core\variant\callable.cpp @ 57] 
12 00000031`5e5fec40 00007ff6`682f276c     godot_windows_editor_dev_x86_64_mono!Callable::call<Ref<InputEvent> >+0xd6 [C:\git\godot\core\variant\variant.h @ 851] 
13 00000031`5e5fed00 00007ff6`682f2482     godot_windows_editor_dev_x86_64_mono!DisplayServerWindows::_dispatch_input_event+0x2dc [C:\git\godot\platform\windows\display_server_windows.cpp @ 2724] 
14 00000031`5e5fee50 00007ff6`6c8634e5     godot_windows_editor_dev_x86_64_mono!DisplayServerWindows::_dispatch_input_events+0x22 [C:\git\godot\platform\windows\display_server_windows.cpp @ 2693] 
15 00000031`5e5fee90 00007ff6`6c86a9be     godot_windows_editor_dev_x86_64_mono!Input::_parse_input_event_impl+0x1935 [C:\git\godot\core\input\input.cpp @ 732] 
16 00000031`5e5ff350 00007ff6`68305002     godot_windows_editor_dev_x86_64_mono!Input::flush_buffered_events+0x8e [C:\git\godot\core\input\input.cpp @ 996] 
17 00000031`5e5ff3a0 00007ff6`682e34c0     godot_windows_editor_dev_x86_64_mono!DisplayServerWindows::process_events+0xb2 [C:\git\godot\platform\windows\display_server_windows.cpp @ 2407] 
18 00000031`5e5ff420 00007ff6`682d5741     godot_windows_editor_dev_x86_64_mono!OS_Windows::run+0x60 [C:\git\godot\platform\windows\os_windows.cpp @ 1473] 
19 00000031`5e5ff460 00007ff6`682d5823     godot_windows_editor_dev_x86_64_mono!widechar_main+0x201 [C:\git\godot\platform\windows\godot_windows.cpp @ 180] 
1a 00000031`5e5ff7e0 00007ff6`682d5862     godot_windows_editor_dev_x86_64_mono!_main+0x43 [C:\git\godot\platform\windows\godot_windows.cpp @ 204] 
1b 00000031`5e5ff820 00007ff6`682d520d     godot_windows_editor_dev_x86_64_mono!main+0x12 [C:\git\godot\platform\windows\godot_windows.cpp @ 218] 
1c 00000031`5e5ff860 00007ff6`6d328466     godot_windows_editor_dev_x86_64_mono!WinMain+0x2d [C:\git\godot\platform\windows\godot_windows.cpp @ 232] 
1d (Inline Function) --------`--------     godot_windows_editor_dev_x86_64_mono!invoke_main+0x21 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 102] 
1e 00000031`5e5ff890 00007ffd`32e7257d     godot_windows_editor_dev_x86_64_mono!__scrt_common_main_seh+0x106 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 288] 
1f 00000031`5e5ff8d0 00007ffd`33f4af28     KERNEL32!BaseThreadInitThunk+0x1d
20 00000031`5e5ff900 00000000`00000000     ntdll!RtlUserThreadStart+0x28
pkdawson commented 3 months ago

Direct crash in my code when disabling viewports:

APPLICATION_VERIFIER_FLAGS:  81643023

APPLICATION_VERIFIER_LOADED: 1

EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 00007ffcc33b06ff (libimgui_godot_native_windows_debug_x86_64!ImGui::Godot::ImGuiWindow::_size_changed+0x000000000000000f)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000001
   Parameter[1]: 00000146219f8f0a
Attempt to write to address 00000146219f8f0a

FAULTING_THREAD:  0000d80c

PROCESS_NAME:  godot.windows.editor.dev.x86_64.mono.exe

WRITE_ADDRESS:  00000146219f8f0a 

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.

EXCEPTION_CODE_STR:  c0000005

EXCEPTION_PARAMETER1:  0000000000000001

EXCEPTION_PARAMETER2:  00000146219f8f0a

STACK_TEXT:  
00000016`db3fdb80 00007ffc`c33aeb4d     : 00000145`a879cfe0 00000000`00000001 00007ffc`c31a1a45 00007ffc`c31a1a45 : libimgui_godot_native_windows_debug_x86_64!ImGui::Godot::ImGuiWindow::_size_changed+0xf
00000016`db3fdb90 00007ffc`c33aea1a     : 00000145`a879cfe0 00007ffc`c319ab0a 00000000`00000000 00000016`db3fde30 : libimgui_godot_native_windows_debug_x86_64!godot::call_with_variant_args_helper<ImGui::Godot::ImGuiWindow>+0x2d
00000016`db3fdbc0 00007ffc`c33b0781     : 00000145`a879cfe0 00007ffc`c319ab0a 00000000`00000000 00007ff6`00000000 : libimgui_godot_native_windows_debug_x86_64!godot::call_with_variant_args_dv<ImGui::Godot::ImGuiWindow>+0x28a
00000016`db3fdcb0 00007ffc`c369876d     : 00000145`c6264f80 00000016`db3fdd58 00000145`a879cfe0 00000000`00000000 : libimgui_godot_native_windows_debug_x86_64!godot::MethodBindT<ImGui::Godot::ImGuiWindow>::call+0x71
00000016`db3fdd10 00007ff6`6cd865e0     : 00000145`c6264f80 00000145`a879cfe0 00000000`00000000 00000000`00000000 : libimgui_godot_native_windows_debug_x86_64!godot::MethodBind::bind_call+0x9d
00000016`db3fddb0 00007ff6`6c707ff0     : 00000146`0da98f20 00000016`db3fdf10 00000145`a8793270 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!GDExtensionMethodBind::call+0x1b0
00000016`db3fde70 00007ff6`6c81ac17     : 00000145`a8793270 00000016`db3fdfe0 00000146`40188fe0 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!Object::callp+0x3a0
00000016`db3fdf40 00007ff6`6c709fa4     : 00000146`40188fe0 00000000`00000000 00000146`00000000 00000016`db3fe218 : godot_windows_editor_dev_x86_64_mono!Callable::callp+0x247
00000016`db3fe010 00007ff6`6a776939     : 00000145`a8793270 00007ff6`707467c0 00000000`00000000 00007ff6`00000000 : godot_windows_editor_dev_x86_64_mono!Object::emit_signalp+0x5b4
00000016`db3fe250 00007ff6`68bbc4f3     : 00000145`a8793270 00007ff6`707467c0 00000000`00000000 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!Node::emit_signalp+0xe9
00000016`db3fe2d0 00007ff6`6a7adb83     : 00000145`a8793270 00007ff6`707467c0 00000016`00000000 00007d69`00000000 : godot_windows_editor_dev_x86_64_mono!Object::emit_signal<>+0xa3
00000016`db3fe340 00007ff6`6a7fe5a2     : 00000145`a8793270 00000016`db3fe528 00000016`db3fe548 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!Viewport::_set_size+0x3d3
00000016`db3fe4c0 00007ff6`6a7fd81b     : 00000145`a8793270 00000016`00000002 00000000`00000000 00007ff6`6a7f8ca7 : godot_windows_editor_dev_x86_64_mono!Window::_update_viewport_size+0x892
00000016`db3fe7e0 00007ff6`6a800ffe     : 00000145`a8793270 00000000`00000000 00000145`a8793200 00000145`b88b1d98 : godot_windows_editor_dev_x86_64_mono!Window::_clear_window+0x23b
00000016`db3fe8b0 00007ff6`68fa2691     : 00000145`a8793270 00007ff6`0000000b 00000016`db3fec01 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!Window::_notification+0xc6e
00000016`db3feb80 00007ff6`6c7084c9     : 00000145`a8793270 00000000`0000000b ffffffff`ffffff01 00007ff6`682d9bd0 : godot_windows_editor_dev_x86_64_mono!Window::_notificationv+0x61
00000016`db3febc0 00007ff6`6a75f00b     : 00000145`a8793270 00000145`0000000b 00000000`00000001 00007ffd`000004d0 : godot_windows_editor_dev_x86_64_mono!Object::notification+0x149
00000016`db3fec30 00007ff6`6a7614a9     : 00000145`a8793270 00000000`00000000 00000016`db3ffb90 00007ff6`6a8003bd : godot_windows_editor_dev_x86_64_mono!Node::_propagate_exit_tree+0x12b
00000016`db3fecf0 00007ff6`6a76bc1c     : 00000145`a8793270 00000000`00000000 00000000`00000000 00007d69`79cffd1a : godot_windows_editor_dev_x86_64_mono!Node::_set_tree+0x39
00000016`db3fed30 00007ff6`6a763222     : 00000146`13a3abc0 00000145`a8793270 00000016`db3fee00 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!Node::remove_child+0x15c
00000016`db3feda0 00007ff6`6853c381     : 00000145`a8793270 00007ff6`00000001 00003ec3`8d826a7a 00000145`9bd98d90 : godot_windows_editor_dev_x86_64_mono!Node::_notification+0xc82
00000016`db3fef60 00007ff6`68fa261f     : 00000145`a8793270 00007ffc`00000001 00000000`0000d801 00007ff6`682dbb9c : godot_windows_editor_dev_x86_64_mono!Node::_notificationv+0x61
00000016`db3fefa0 00007ff6`68fa26af     : 00000145`a8793270 00007ffc`00000001 00002207`83e8ed01 00000145`db72ecd0 : godot_windows_editor_dev_x86_64_mono!Viewport::_notificationv+0x7f
00000016`db3fefe0 00007ff6`6c7084c9     : 00000145`a8793270 00000145`00000001 00000145`db72ec01 00000145`db72ecd0 : godot_windows_editor_dev_x86_64_mono!Window::_notificationv+0x7f
00000016`db3ff020 00007ff6`6c701c87     : 00000145`a8793270 00007ff6`00000001 00007ff6`707d0f01 00000000`00000003 : godot_windows_editor_dev_x86_64_mono!Object::notification+0x149
00000016`db3ff090 00007ff6`6c701c33     : 00000145`a8793270 00007ff6`6831bcea 00007ff6`707d0fd8 00007ff6`6830cd2a : godot_windows_editor_dev_x86_64_mono!Object::_predelete+0x27
00000016`db3ff0d0 00007ff6`6834f853     : 00000145`a8793270 00000145`db72ec88 00000016`000004e6 0000000a`bd0004e6 : godot_windows_editor_dev_x86_64_mono!predelete_handler+0x13
00000016`db3ff100 00007ff6`6a737243     : 00000145`a8793270 00000145`db72ec88 00000000`00000000 00007ff6`6c7099f0 : godot_windows_editor_dev_x86_64_mono!memdelete<Object>+0x13
00000016`db3ff140 00007ff6`6a73b6b1     : 00000145`db72ea90 00007ff6`70746600 00000145`bc39af80 bf5e10bf`60aa97e4 : godot_windows_editor_dev_x86_64_mono!SceneTree::_flush_delete_queue+0x73
00000016`db3ff190 00007ff6`6834c470     : 00000145`db72ea90 3f7a9df2`49f77c29 3f911111`11111111 00007ffd`0000003c : godot_windows_editor_dev_x86_64_mono!SceneTree::process+0x211
00000016`db3ff2e0 00007ff6`682e34c6     : 00000145`9bd98ba0 00000000`00000000 00000000`00000000 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!Main::iteration+0x810
00000016`db3ff6b0 00007ff6`682d5741     : 00000016`db3ff780 00000145`00000000 00000145`f1f25ff8 00007ffc`00000001 : godot_windows_editor_dev_x86_64_mono!OS_Windows::run+0x66
00000016`db3ff6f0 00007ff6`682d5823     : 00000145`00000001 00000145`f1ce8f70 00000000`0000000a 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!widechar_main+0x201
00000016`db3ffa70 00007ff6`682d5862     : 00000145`e8da0fdc 00000145`e8da0f68 00000000`00000000 00007ff6`705fb530 : godot_windows_editor_dev_x86_64_mono!_main+0x43
00000016`db3ffab0 00007ff6`682d520d     : 00000145`00000000 00000000`00000000 00000000`00000000 00007ff6`6d3fea10 : godot_windows_editor_dev_x86_64_mono!main+0x12
00000016`db3ffaf0 00007ff6`6d328466     : 00007ff6`682c0000 00000000`00000000 00000145`edaeaff9 00000000`0000000a : godot_windows_editor_dev_x86_64_mono!WinMain+0x2d
00000016`db3ffb20 00007ffd`32e7257d     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : godot_windows_editor_dev_x86_64_mono!__scrt_common_main_seh+0x106
00000016`db3ffb60 00007ffd`33f4af28     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x1d
00000016`db3ffb90 00000000`00000000     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x28

STACK_COMMAND:  ~0s ; .cxr ; kb

FAULTING_SOURCE_LINE:  C:\git\imgui-godot\gdext\src\Viewports.h

FAULTING_SOURCE_FILE:  C:\git\imgui-godot\gdext\src\Viewports.h

FAULTING_SOURCE_LINE_NUMBER:  34

FAULTING_SOURCE_CODE:  
    30:     void _input(const Ref<InputEvent>& evt) override;
    31: 
    32:     void _close_requested() { _vp->PlatformRequestClose = true; }
    33: 
>   34:     void _size_changed() { _vp->PlatformRequestResize = true; }
    35: 
    36: private:
    37:     ImGuiViewport* _vp = nullptr;
    38: };
    39: 

SYMBOL_NAME:  libimgui_godot_native_windows_debug_x86_64!ImGui::Godot::ImGuiWindow::_size_changed+f

MODULE_NAME: libimgui_godot_native_windows_debug_x86_64

IMAGE_NAME:  libimgui-godot-native.windows.debug.x86_64.dll

FAILURE_BUCKET_ID:  INVALID_POINTER_WRITE_AVRF_c0000005_libimgui-godot-native.windows.debug.x86_64.dll!ImGui::Godot::ImGuiWindow::_size_changed
pkdawson commented 3 months ago

Some stuff fixed. The NVIDIA driver crash is reproducible in an official ImGui demo, so not my (or Godot's) problem.