Skip to content

WayfireSwitcher crashes wayfire #3036

@skinkie

Description

@skinkie

Wayfire version

0.11.0-4ffa601d (May 30 2026) branch master wlroots-0.20.0

GPU / Driver

==========
VULKANINFO
==========

Vulkan Instance Version: 1.4.350


Instance Extensions: count = 26
-------------------------------
VK_EXT_acquire_drm_display             : extension revision 1
VK_EXT_acquire_xlib_display            : extension revision 1
VK_EXT_debug_report                    : extension revision 10
VK_EXT_debug_utils                     : extension revision 2
VK_EXT_direct_mode_display             : extension revision 1
VK_EXT_display_surface_counter         : extension revision 1
VK_EXT_headless_surface                : extension revision 1
VK_EXT_layer_settings                  : extension revision 2
VK_EXT_surface_maintenance1            : extension revision 1
VK_EXT_swapchain_colorspace            : extension revision 5
VK_KHR_device_group_creation           : extension revision 1
VK_KHR_display                         : extension revision 23
VK_KHR_external_fence_capabilities     : extension revision 1
VK_KHR_external_memory_capabilities    : extension revision 1
VK_KHR_external_semaphore_capabilities : extension revision 1
VK_KHR_get_display_properties2         : extension revision 1
VK_KHR_get_physical_device_properties2 : extension revision 2
VK_KHR_get_surface_capabilities2       : extension revision 1
VK_KHR_portability_enumeration         : extension revision 1
VK_KHR_surface                         : extension revision 25
VK_KHR_surface_maintenance1            : extension revision 1
VK_KHR_surface_protected_capabilities  : extension revision 1
VK_KHR_wayland_surface                 : extension revision 6
VK_KHR_xcb_surface                     : extension revision 6
VK_KHR_xlib_surface                    : extension revision 6
VK_LUNARG_direct_driver_loading        : extension revision 1

Instance Layers: count = 3
--------------------------
VK_LAYER_MESA_anti_lag      Open-source implementation of the VK_AMD_anti_lag extension. 1.4.303  version 1
VK_LAYER_MESA_device_select Linux device selection layer                                 1.4.303  version 1
VK_LAYER_MESA_overlay       Mesa Overlay layer                                           1.4.303  version 1

Devices:
========
GPU0:
	apiVersion         = 1.4.348
	driverVersion      = 26.1.1
	vendorID           = 0x1002
	deviceID           = 0x15dd
	deviceType         = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
	deviceName         = AMD Radeon Vega 8 Graphics (RADV RAVEN)
	driverID           = DRIVER_ID_MESA_RADV
	driverName         = radv
	driverInfo         = Mesa 26.1.1
	conformanceVersion = 1.4.0.0
	deviceUUID         = 00000000-0500-0000-0000-000000000000
	driverUUID         = 414d442d-4d45-5341-2d44-525600000000

Describe the bug

Wayfire crashes often when using alt-tab, but not always.

To Reproduce

  1. alt-tab

Expected behavior

Not crash.

Screenshots / Videos / Stacktrace

EE 2026-05-31 13:02:04.983 - [xwayland/xwm.c:1449] Failed to get window property
EE 2026-05-31 13:07:46.810 - [xwayland/xwm.c:1449] Failed to get window property
EE 2026-05-31 13:08:21.574 - [src/main.cpp:144] Fatal error: Segmentation fault
EE 2026-05-31 13:08:21.677 - #1  signal_handler(int) ../src/main.cpp:146
EE 2026-05-31 13:08:21.692 - #2  __sigaction ??:?
EE 2026-05-31 13:08:21.773 - #3  WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}::operator()(SwitcherView*, SwitcherView*) const ../plugins/single_plugins/switcher.cpp:769
EE 2026-05-31 13:08:21.854 - #4  void std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}>(__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:1757 (discriminator 3)
EE 2026-05-31 13:08:21.935 - #5  __gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >::operator++() /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_iterator.h:1103
EE 2026-05-31 13:08:22.015 - #6  void std::__chunk_insertion_sort<__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, long, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}>(__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, __gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, long, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:2669 (discriminator 1)
EE 2026-05-31 13:08:22.095 - #7  void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, SwitcherView**, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}>(__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, __gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, SwitcherView**, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:2692
EE 2026-05-31 13:08:22.176 - #8  void std::__stable_sort_adaptive<__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, SwitcherView**, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}>(__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, __gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, __gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, SwitcherView**, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:2711
EE 2026-05-31 13:08:22.256 - #9  void std::__stable_sort<__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}>(__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, __gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:5001 (discriminator 2)
EE 2026-05-31 13:08:22.337 - #10 void std::stable_sort<__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}>(__gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, __gnu_cxx::__normal_iterator<SwitcherView**, std::vector<SwitcherView*, std::allocator<SwitcherView*> > >, WayfireSwitcher::calculate_render_order()::{lambda(SwitcherView*, SwitcherView*)#1}) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:5080
EE 2026-05-31 13:08:22.421 - #11 WayfireSwitcher::calculate_render_order() ../plugins/single_plugins/switcher.cpp:795
EE 2026-05-31 13:08:22.501 - #12 WayfireSwitcher::render(wf::scene::render_instruction_t const&) ../plugins/single_plugins/switcher.cpp:808 (discriminator 1)
EE 2026-05-31 13:08:22.583 - #13 WayfireSwitcher::switcher_render_node_t::switcher_render_instance_t::render(wf::scene::render_instruction_t const&) ../plugins/single_plugins/switcher.cpp:166
EE 2026-05-31 13:08:22.717 - #14 wf::render_pass_t::run_partial() ../src/render.cpp:618
EE 2026-05-31 13:08:24.493 - #15 wf::render_manager::impl::start_output_pass(std::unique_ptr<wf::swapchain_damage_manager_t::frame_object_t, std::default_delete<wf::swapchain_damage_manager_t::frame_object_t> >&) ../src/output/render-manager.cpp:1028
EE 2026-05-31 13:08:26.228 - #16 wf::render_manager::impl::paint() ../src/output/render-manager.cpp:1092 (discriminator 1)
EE 2026-05-31 13:08:28.030 - #17 wf::render_manager::impl::impl(wf::output_t*)::{lambda(void*)#1}::operator()(void*) const ../src/output/render-manager.cpp:850
EE 2026-05-31 13:08:29.793 - #18 void std::__invoke_impl<void, wf::render_manager::impl::impl(wf::output_t*)::{lambda(void*)#1}&, void*>(std::__invoke_other, wf::render_manager::impl::impl(wf::output_t*)::{lambda(void*)#1}&, void*&&) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/invoke.h:63 (discriminator 3)
EE 2026-05-31 13:08:31.544 - #19 std::enable_if<is_invocable_r_v<void, wf::render_manager::impl::impl(wf::output_t*)::{lambda(void*)#1}&, void*>, void>::type std::__invoke_r<void, wf::render_manager::impl::impl(wf::output_t*)::{lambda(void*)#1}&, void*>(wf::render_manager::impl::impl(wf::output_t*)::{lambda(void*)#1}&, void*&&) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/invoke.h:119
EE 2026-05-31 13:08:33.275 - #20 std::_Function_handler<void (void*), wf::render_manager::impl::impl(wf::output_t*)::{lambda(void*)#1}>::_M_invoke(std::_Any_data const&, void*&&) /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/std_function.h:296
EE 2026-05-31 13:08:33.390 - #21 std::function<void (void*)>::operator()(void*) const /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/std_function.h:581 (discriminator 2)
EE 2026-05-31 13:08:33.506 - #22 wf::wl_listener_wrapper::emit(void*) ../src/wl-listener-wrapper.tpp:59
EE 2026-05-31 13:08:33.621 - #23 wf::handle_wrapped_listener(wl_listener*, void*) ../src/wl-listener-wrapper.tpp:11
EE 2026-05-31 13:08:33.632 - #24 wl_signal_emit_mutable ??:?
EE 2026-05-31 13:08:33.645 - #25 wlr_drm_backend_create ??:?
EE 2026-05-31 13:08:33.656 - #26 drmHandleEvent ??:?
EE 2026-05-31 13:08:33.667 - #27 wlr_drm_connector_get_panel_orientation ??:?
EE 2026-05-31 13:08:33.678 - #28 wl_event_loop_dispatch ??:?
EE 2026-05-31 13:08:33.689 - #29 wl_display_run ??:?
EE 2026-05-31 13:08:33.781 - #30 main ../src/main.cpp:515
EE 2026-05-31 13:08:33.794 - #31 __libc_init_first ??:?
EE 2026-05-31 13:08:33.807 - #32 __libc_start_main ??:?
EE 2026-05-31 13:08:35.656 - #33 _start ??:?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions