Fix empty nodes crash (#38259)

The crash occured because we raced against the platform windowing
backend to render a frame, and if we lost the race there would be no
frame on a window that we return, which breaks most of gpui

Release Notes:

- N/A
This commit is contained in:
localcc
2025-09-17 11:26:53 +02:00
committed by GitHub
parent a2de91827d
commit d48d6a7454
+8
View File
@@ -958,6 +958,14 @@ impl App {
cx.window_update_stack.pop();
window.root.replace(root_view.into());
window.defer(cx, |window: &mut Window, cx| window.appearance_changed(cx));
// allow a window to draw at least once before returning
// this didn't cause any issues on non windows platforms as it seems we always won the race to on_request_frame
// on windows we quite frequently lose the race and return a window that has never rendered, which leads to a crash
// where DispatchTree::root_node_id asserts on empty nodes
let clear = window.draw(cx);
clear.clear();
cx.window_handles.insert(id, window.handle);
cx.windows.get_mut(id).unwrap().replace(window);
Ok(handle)