-
Notifications
You must be signed in to change notification settings - Fork 269
ext_background_effect_surface_v1 destroy sequence causes fatal Wayland protocol error (Dolphin crash) #1972
Description
Some apps (notably the Dolphin file manager) crash when performing certain actions, particularly closing dialogue menus. This error was found on the Niri WIP branch, but I was directed by YaLTeR (the creator of Niri) to repost it here.
Error output:
[destroyed object]: error 0: wl_surface was destroyed
The Wayland connection experienced a fatal error: Protocol error
WAYLAND_DEBUG=1 trace:
Relevant section:
-> ext_background_effect_surface_v1#55.destroy()
-> wl_compositor#4.create_surface(new id wl_surface#54)
...
wl_display#1.delete_id(36) <- surface deleted by server
wl_display#1.error(nil, 0, "wl_surface was destroyed") <- nil reference
Last 50 lines
[1108851.450] {Default Queue} wl_pointer#22.motion(352486620, 202.50000000, 526.50000000)
[1108851.488] {Default Queue} wl_pointer#22.frame()
[1108858.603] {Default Queue} wl_pointer#22.motion(352486627, 199.50000000, 528.00000000)
[1108858.665] {Default Queue} wl_pointer#22.frame()
[1108866.582] {Default Queue} wl_pointer#22.motion(352486635, 198.00000000, 529.50000000)
[1108866.639] {Default Queue} wl_pointer#22.frame()
[1108873.714] {Default Queue} wl_pointer#22.motion(352486642, 195.00000000, 531.00000000)
[1108873.776] {Default Queue} wl_pointer#22.frame()
[1108882.543] {Default Queue} wl_pointer#22.motion(352486650, 193.50000000, 532.50000000)
[1108882.601] {Default Queue} wl_pointer#22.frame()
[1108888.391] {Default Queue} wl_pointer#22.motion(352486657, 192.00000000, 532.50000000)
[1108888.450] {Default Queue} wl_pointer#22.frame()
[1108896.601] {Default Queue} wl_pointer#22.motion(352486665, 190.50000000, 532.50000000)
[1108896.659] {Default Queue} wl_pointer#22.frame()
[1108903.481] {Default Queue} wl_pointer#22.motion(352486672, 190.50000000, 534.00000000)
[1108903.535] {Default Queue} wl_pointer#22.frame()
[1108911.704] {Default Queue} wl_pointer#22.motion(352486680, 189.00000000, 534.00000000)
[1108911.764] {Default Queue} wl_pointer#22.frame()
[1108957.395] {Default Queue} wl_pointer#22.motion(352486725, 187.50000000, 535.50000000)
[1108957.453] {Default Queue} wl_pointer#22.frame()
[1108962.947] {Default Queue} wl_pointer#22.motion(352486732, 186.00000000, 537.00000000)
[1108962.972] {Default Queue} wl_pointer#22.frame()
[1108977.894] {Default Queue} wl_pointer#22.motion(352486747, 184.50000000, 538.50000000)
[1108977.920] {Default Queue} wl_pointer#22.frame()
[1108992.993] {Default Queue} wl_pointer#22.motion(352486762, 184.50000000, 540.00000000)
[1108993.022] {Default Queue} wl_pointer#22.frame()
[1109000.907] {Default Queue} wl_pointer#22.motion(352486770, 183.00000000, 540.00000000)
[1109000.933] {Default Queue} wl_pointer#22.frame()
[1109022.993] {Default Queue} wl_pointer#22.motion(352486792, 183.00000000, 541.50000000)
[1109023.037] {Default Queue} wl_pointer#22.frame()
[1109189.314] {Default Queue} wl_pointer#22.button(7422838, 352486957, 272, 1)
[1109189.375] {Default Queue} wl_pointer#22.frame()
[1109189.620] {Default Queue} -> xdg_popup#47.destroy()
[1109189.641] {Default Queue} -> xdg_surface#39.destroy()
[1109189.654] {Default Queue} -> wl_surface#36.attach(nil, 0, 0)
[1109189.665] {Default Queue} -> wl_surface#36.commit()
[1109189.760] {Default Queue} -> wl_surface#36.destroy()
[1109189.779] {Default Queue} -> wp_viewport#37.destroy()
[1109189.787] {Default Queue} -> wp_fractional_scale_v1#38.destroy()
[1109189.800] {Default Queue} -> ext_background_effect_surface_v1#55.destroy()
[1109190.151] wl_buffer#45.release()
[1109190.166] wl_buffer#43.release()
[1109190.347] {Display Queue} wl_display#1.delete_id(47)
[1109190.364] {Display Queue} wl_display#1.delete_id(39)
[1109190.376] {Display Queue} wl_display#1.delete_id(36)
[1109190.383] {Display Queue} wl_display#1.delete_id(37)
[1109190.392] {Display Queue} wl_display#1.delete_id(38)
[1109190.398] {Display Queue} wl_display#1.error(nil, 0, "wl_surface was destroyed")
[destroyed object]: error 0: wl_surface was destroyed
The Wayland connection experienced a fatal error: Protocol error
Dolphin destroys a popup and its associated ext_background_effect_surface_v1 object, then creates a new surface for a dialog. Niri then sends a wl_display.error referencing a nil object, which kills the connection. The nil in the error suggests Niri holds a dangling reference to the destroyed surface.
System Information
- niri version:
niri 25.11 (v25.11-129-g734d86ec)
- Distro: Arch Linux
- GPU: AMD Radeon 780M
- CPU: AMD Ryzen 7 8845HS
DISCLAIMER: This report was partially written with the assistance of AI because I don't fully understand the bug. However, it was a real issue I encountered independently, and all information appears correct to me.