wayfire icon indicating copy to clipboard operation
wayfire copied to clipboard

Crash in input-method-v1 plugin

Open ammen99 opened this issue 1 year ago • 0 comments

Reproducible with simple-tile, alacritty set to auto-tile and running:

alacritty msg create-window -e /bin/zsh -c "/bin/false"

Stacktrace:

AddressSanitizer:DEADLYSIGNAL
=================================================================
==167203==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f3ab533ec86 bp 0x7ffd8380e930 sp 0x7ffd8380e920 T0)
==167203==The signal is caused by a READ memory access.
==167203==Hint: address points to the zero page.
    #0 0x7f3ab533ec86 in wlr_text_input_v3_send_leave ../types/wlr_text_input_v3.c:39
    #1 0x7f3a8709de97 in wayfire_im_text_input_base_t::set_focus_surface(wlr_surface*) ../plugins/protocols/text-input-v1-v3.hpp:24
    #2 0x7f3a87021e42 in std::function<void (wayfire_im_text_input_base_t*)>::operator()(wayfire_im_text_input_base_t*) const /usr/include/c++/14/bits/std_function.h:591
    #3 0x7f3a87021e42 in wayfire_input_method_v1::for_each_text_input(std::function<void (wayfire_im_text_input_base_t*)>) ../plugins/protocols/input-method-v1.cpp:936
    #4 0x7f3a870937aa in wayfire_input_method_v1::on_keyboard_focus_changed::{lambda(wf::keyboard_focus_changed_signal*)#1}::operator()(wf::keyboard_focus_changed_signal*) const ../plugins/protocols/input-method-v1.cpp:577
    #5 0xb258c6 in std::function<void (wf::keyboard_focus_changed_signal*)>::operator()(wf::keyboard_focus_changed_signal*) const /usr/include/c++/14/bits/std_function.h:591
    #6 0xb258c6 in wf::signal::connection_t<wf::keyboard_focus_changed_signal>::emit(wf::keyboard_focus_changed_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #7 0xb258c6 in wf::signal::provider_t::emit<wf::keyboard_focus_changed_signal>(wf::keyboard_focus_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../src/api/wayfire/signal-provider.hpp:163
    #8 0xb258c6 in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::keyboard_focus_changed_signal>(wf::keyboard_focus_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::keyboard_focus_changed_signal>(wf::keyboard_focus_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:61
    #9 0xb258c6 in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::keyboard_focus_changed_signal>(wf::keyboard_focus_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>, void>::type std::__invoke_r<void, wf::signal::provider_t::emit<wf::keyboard_focus_changed_signal>(wf::keyboard_focus_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::keyboard_focus_changed_signal>(wf::keyboard_focus_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:111
    #10 0xb258c6 in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::keyboard_focus_changed_signal>(wf::keyboard_focus_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/std_function.h:290
    #11 0x4bee4c in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/14/bits/std_function.h:591
    #12 0x4bee4c in wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) ../src/api/wayfire/nonstd/safe-list.hpp:78
    #13 0xb08f4d in void wf::signal::provider_t::emit<wf::keyboard_focus_changed_signal>(wf::keyboard_focus_changed_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #14 0xb08f4d in wf::seat_t::impl::set_keyboard_focus(std::shared_ptr<wf::scene::node_t>, wf::keyboard_focus_reason) ../src/core/seat/seat.cpp:533
    #15 0xb20a0a in wf::seat_t::refocus() ../src/core/seat/seat.cpp:201
    #16 0x6f2326 in std::function<void (wf::scene::root_node_update_signal*)>::operator()(wf::scene::root_node_update_signal*) const /usr/include/c++/14/bits/std_function.h:591
    #17 0x6f2326 in wf::signal::connection_t<wf::scene::root_node_update_signal>::emit(wf::scene::root_node_update_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #18 0x6f2326 in wf::signal::provider_t::emit<wf::scene::root_node_update_signal>(wf::scene::root_node_update_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../src/api/wayfire/signal-provider.hpp:163
    #19 0x6f2326 in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::scene::root_node_update_signal>(wf::scene::root_node_update_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::scene::root_node_update_signal>(wf::scene::root_node_update_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:61
    #20 0x6f2326 in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::scene::root_node_update_signal>(wf::scene::root_node_update_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>, void>::type std::__invoke_r<void, wf::signal::provider_t::emit<wf::scene::root_node_update_signal>(wf::scene::root_node_update_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::scene::root_node_update_signal>(wf::scene::root_node_update_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:111
    #21 0x6f2326 in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::scene::root_node_update_signal>(wf::scene::root_node_update_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/std_function.h:290
    #22 0x4bee4c in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/14/bits/std_function.h:591
    #23 0x4bee4c in wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) ../src/api/wayfire/nonstd/safe-list.hpp:78
    #24 0x6e0acd in void wf::signal::provider_t::emit<wf::scene::root_node_update_signal>(wf::scene::root_node_update_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #25 0x6e0acd in wf::scene::update(std::shared_ptr<wf::scene::node_t>, unsigned int) ../src/core/scene.cpp:513
    #26 0x6e05e8 in wf::scene::update(std::shared_ptr<wf::scene::node_t>, unsigned int) ../src/core/scene.cpp:525
    #27 0x6e05e8 in wf::scene::update(std::shared_ptr<wf::scene::node_t>, unsigned int) ../src/core/scene.cpp:525
    #28 0x6e05e8 in wf::scene::update(std::shared_ptr<wf::scene::node_t>, unsigned int) ../src/core/scene.cpp:525
    #29 0x6e05e8 in wf::scene::update(std::shared_ptr<wf::scene::node_t>, unsigned int) ../src/core/scene.cpp:525
    #30 0x6e05e8 in wf::scene::update(std::shared_ptr<wf::scene::node_t>, unsigned int) ../src/core/scene.cpp:525
    #31 0x6e05e8 in wf::scene::update(std::shared_ptr<wf::scene::node_t>, unsigned int) ../src/core/scene.cpp:525
    #32 0x6e05e8 in wf::scene::update(std::shared_ptr<wf::scene::node_t>, unsigned int) ../src/core/scene.cpp:525
    #33 0xbf1bea in wf::view_interface_t::emit_view_unmap() ../src/view/view-impl.cpp:78
    #34 0xcb1a07 in wf::xdg_toplevel_view_base_t::unmap() ../src/view/xdg-shell/xdg-toplevel-view.cpp:78
    #35 0xca790c in wf::xdg_toplevel_view_t::handle_toplevel_state_changed(wf::toplevel_state_t) ../src/view/xdg-shell/xdg-toplevel-view.cpp:329
    #36 0xca8f83 in operator() ../src/view/xdg-shell/xdg-toplevel-view.cpp:178
    #37 0xca8f83 in __invoke_impl<void, wf::xdg_toplevel_view_t::xdg_toplevel_view_t(wlr_xdg_toplevel*)::<lambda(wf::xdg_toplevel_applied_state_signal*)>&, wf::xdg_toplevel_applied_state_signal*> /usr/include/c++/14/bits/invoke.h:61
    #38 0xca8f83 in __invoke_r<void, wf::xdg_toplevel_view_t::xdg_toplevel_view_t(wlr_xdg_toplevel*)::<lambda(wf::xdg_toplevel_applied_state_signal*)>&, wf::xdg_toplevel_applied_state_signal*> /usr/include/c++/14/bits/invoke.h:111
    #39 0xca8f83 in _M_invoke /usr/include/c++/14/bits/std_function.h:290
    #40 0xc85186 in std::function<void (wf::xdg_toplevel_applied_state_signal*)>::operator()(wf::xdg_toplevel_applied_state_signal*) const /usr/include/c++/14/bits/std_function.h:591
    #41 0xc85186 in wf::signal::connection_t<wf::xdg_toplevel_applied_state_signal>::emit(wf::xdg_toplevel_applied_state_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #42 0xc85186 in wf::signal::provider_t::emit<wf::xdg_toplevel_applied_state_signal>(wf::xdg_toplevel_applied_state_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../src/api/wayfire/signal-provider.hpp:163
    #43 0xc85186 in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::xdg_toplevel_applied_state_signal>(wf::xdg_toplevel_applied_state_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::xdg_toplevel_applied_state_signal>(wf::xdg_toplevel_applied_state_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:61
    #44 0xc85186 in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::xdg_toplevel_applied_state_signal>(wf::xdg_toplevel_applied_state_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>, void>::type std::__invoke_r<void, wf::signal::provider_t::emit<wf::xdg_toplevel_applied_state_signal>(wf::xdg_toplevel_applied_state_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::xdg_toplevel_applied_state_signal>(wf::xdg_toplevel_applied_state_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:111
    #45 0xc85186 in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::xdg_toplevel_applied_state_signal>(wf::xdg_toplevel_applied_state_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/std_function.h:290
    #46 0x4bee4c in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/14/bits/std_function.h:591
    #47 0x4bee4c in wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) ../src/api/wayfire/nonstd/safe-list.hpp:78
    #48 0xc76247 in void wf::signal::provider_t::emit<wf::xdg_toplevel_applied_state_signal>(wf::xdg_toplevel_applied_state_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #49 0xc76247 in wf::xdg_toplevel_t::apply() ../src/view/xdg-shell/xdg-toplevel.cpp:142
    #50 0x7cdd55 in wf::txn::transaction_t::apply(bool) ../src/core/txn/transaction.cpp:82
    #51 0x7d56fa in operator() ../src/core/txn/transaction.cpp:28
    #52 0x7d56fa in __invoke_impl<void, wf::txn::transaction_t::transaction_t(uint64_t, timer_setter_t)::<lambda(wf::txn::object_ready_signal*)>&, wf::txn::object_ready_signal*> /usr/include/c++/14/bits/invoke.h:61
    #53 0x7d56fa in __invoke_r<void, wf::txn::transaction_t::transaction_t(uint64_t, timer_setter_t)::<lambda(wf::txn::object_ready_signal*)>&, wf::txn::object_ready_signal*> /usr/include/c++/14/bits/invoke.h:111
    #54 0x7d56fa in _M_invoke /usr/include/c++/14/bits/std_function.h:290
    #55 0xc858a6 in std::function<void (wf::txn::object_ready_signal*)>::operator()(wf::txn::object_ready_signal*) const /usr/include/c++/14/bits/std_function.h:591
    #56 0xc858a6 in wf::signal::connection_t<wf::txn::object_ready_signal>::emit(wf::txn::object_ready_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #57 0xc858a6 in wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../src/api/wayfire/signal-provider.hpp:163
    #58 0xc858a6 in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:61
    #59 0xc858a6 in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>, void>::type std::__invoke_r<void, wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:111
    #60 0xc858a6 in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/std_function.h:290
    #61 0x4bee4c in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/14/bits/std_function.h:591
    #62 0x4bee4c in wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) ../src/api/wayfire/nonstd/safe-list.hpp:78
    #63 0xc73c80 in void wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #64 0xc73c80 in wf::txn::emit_object_ready(wf::txn::transaction_object_t*) ../src/api/wayfire/txn/transaction-object.hpp:66
    #65 0xc73c80 in wf::xdg_toplevel_t::emit_ready() ../src/view/xdg-shell/xdg-toplevel.cpp:243
    #66 0xc828ed in wf::xdg_toplevel_t::commit() ../src/view/xdg-shell/xdg-toplevel.cpp:105
    #67 0x7d034a in wf::txn::transaction_t::commit() ../src/core/txn/transaction.cpp:61
    #68 0x81e14f in wf::txn::transaction_manager_t::impl::do_commit(std::unique_ptr<wf::txn::transaction_t, std::default_delete<wf::txn::transaction_t> >) ../src/core/txn/transaction-manager-impl.hpp:109
    #69 0x81e14f in wf::txn::transaction_manager_t::impl::consider_commit() ../src/core/txn/transaction-manager-impl.hpp:86
    #70 0x826016 in wf::txn::transaction_manager_t::impl::on_tx_apply::{lambda(wf::txn::transaction_applied_signal*)#1}::operator()(wf::txn::transaction_applied_signal*) const ../src/core/txn/transaction-manager-impl.hpp:130
    #71 0x7d67f6 in std::function<void (wf::txn::transaction_applied_signal*)>::operator()(wf::txn::transaction_applied_signal*) const /usr/include/c++/14/bits/std_function.h:591
    #72 0x7d67f6 in wf::signal::connection_t<wf::txn::transaction_applied_signal>::emit(wf::txn::transaction_applied_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #73 0x7d67f6 in wf::signal::provider_t::emit<wf::txn::transaction_applied_signal>(wf::txn::transaction_applied_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../src/api/wayfire/signal-provider.hpp:163
    #74 0x7d67f6 in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::txn::transaction_applied_signal>(wf::txn::transaction_applied_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::txn::transaction_applied_signal>(wf::txn::transaction_applied_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:61
    #75 0x7d67f6 in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::txn::transaction_applied_signal>(wf::txn::transaction_applied_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>, void>::type std::__invoke_r<void, wf::signal::provider_t::emit<wf::txn::transaction_applied_signal>(wf::txn::transaction_applied_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::txn::transaction_applied_signal>(wf::txn::transaction_applied_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:111
    #76 0x7d67f6 in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::txn::transaction_applied_signal>(wf::txn::transaction_applied_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/std_function.h:290
    #77 0x4bee4c in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/14/bits/std_function.h:591
    #78 0x4bee4c in wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) ../src/api/wayfire/nonstd/safe-list.hpp:78
    #79 0x7ce056 in void wf::signal::provider_t::emit<wf::txn::transaction_applied_signal>(wf::txn::transaction_applied_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #80 0x7ce056 in wf::txn::transaction_t::apply(bool) ../src/core/txn/transaction.cpp:88
    #81 0x7d56fa in operator() ../src/core/txn/transaction.cpp:28
    #82 0x7d56fa in __invoke_impl<void, wf::txn::transaction_t::transaction_t(uint64_t, timer_setter_t)::<lambda(wf::txn::object_ready_signal*)>&, wf::txn::object_ready_signal*> /usr/include/c++/14/bits/invoke.h:61
    #83 0x7d56fa in __invoke_r<void, wf::txn::transaction_t::transaction_t(uint64_t, timer_setter_t)::<lambda(wf::txn::object_ready_signal*)>&, wf::txn::object_ready_signal*> /usr/include/c++/14/bits/invoke.h:111
    #84 0x7d56fa in _M_invoke /usr/include/c++/14/bits/std_function.h:290
    #85 0xc858a6 in std::function<void (wf::txn::object_ready_signal*)>::operator()(wf::txn::object_ready_signal*) const /usr/include/c++/14/bits/std_function.h:591
    #86 0xc858a6 in wf::signal::connection_t<wf::txn::object_ready_signal>::emit(wf::txn::object_ready_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #87 0xc858a6 in wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../src/api/wayfire/signal-provider.hpp:163
    #88 0xc858a6 in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:61
    #89 0xc858a6 in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>, void>::type std::__invoke_r<void, wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/invoke.h:111
    #90 0xc858a6 in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/14/bits/std_function.h:290
    #91 0x4bee4c in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/14/bits/std_function.h:591
    #92 0x4bee4c in wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) ../src/api/wayfire/nonstd/safe-list.hpp:78
    #93 0xc73c80 in void wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #94 0xc73c80 in wf::txn::emit_object_ready(wf::txn::transaction_object_t*) ../src/api/wayfire/txn/transaction-object.hpp:66
    #95 0xc73c80 in wf::xdg_toplevel_t::emit_ready() ../src/view/xdg-shell/xdg-toplevel.cpp:243
    #96 0xc7a0c0 in wf::xdg_toplevel_t::handle_surface_commit() ../src/view/xdg-shell/xdg-toplevel.cpp:170
    #97 0x485266 in std::function<void (void*)>::operator()(void*) const /usr/include/c++/14/bits/std_function.h:591
    #98 0x485266 in wf::wl_listener_wrapper::emit(void*) ../src/wl-listener-wrapper.tpp:57
    #99 0x7f3ab620706b in wl_signal_emit_mutable (/lib64/libwayland-server.so.0+0x806b) (BuildId: 169690a28473ea9dca11fbef45320991db6ab848)
    #100 0x7f3ab5319ab3 in surface_commit_state ../types/wlr_compositor.c:502
    #101 0x7f3ab5319b69 in surface_handle_commit ../types/wlr_compositor.c:521
    #102 0x7f3ab5923055 in ffi_call_unix64 (/lib64/libffi.so.8+0x9055) (BuildId: 29a050363f92ea79406ecffcf83087d713d2da31)
    #103 0x7f3ab591e74c in ffi_call_int.lto_priv.0 (/lib64/libffi.so.8+0x474c) (BuildId: 29a050363f92ea79406ecffcf83087d713d2da31)
    #104 0x7f3ab592164d in ffi_call (/lib64/libffi.so.8+0x764d) (BuildId: 29a050363f92ea79406ecffcf83087d713d2da31)
    #105 0x7f3ab6205b22 in wl_closure_invoke.constprop.0 (/lib64/libwayland-server.so.0+0x6b22) (BuildId: 169690a28473ea9dca11fbef45320991db6ab848)
    #106 0x7f3ab620a831 in wl_client_connection_data (/lib64/libwayland-server.so.0+0xb831) (BuildId: 169690a28473ea9dca11fbef45320991db6ab848)
    #107 0x7f3ab6208c91 in wl_event_loop_dispatch (/lib64/libwayland-server.so.0+0x9c91) (BuildId: 169690a28473ea9dca11fbef45320991db6ab848)
    #108 0x7f3ab620acf4 in wl_display_run (/lib64/libwayland-server.so.0+0xbcf4) (BuildId: 169690a28473ea9dca11fbef45320991db6ab848)
    #109 0x430dcd in main ../src/main.cpp:454
    #110 0x7f3ab440f247 in __libc_start_call_main (/lib64/libc.so.6+0x3247) (BuildId: b6c381bfdcb5e08ea82c1c39cf16580181fb6cfc)
    #111 0x7f3ab440f30a in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x330a) (BuildId: b6c381bfdcb5e08ea82c1c39cf16580181fb6cfc)
    #112 0x435b34 in _start (/usr/bin/wayfire+0x435b34) (BuildId: ce4851d28279ce8ecfbc4351d378d169fc09a3ce)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV ../types/wlr_text_input_v3.c:39 in wlr_text_input_v3_send_leave
==167203==ABORTING
(EE) failed to read Wayland events: Broken pipe

Most probably caused by the fact that the view gets stuck in a random transaction while it is destroyed, which delays the focus change and we get a stale wlr_surface as a focus.

ammen99 avatar Dec 27 '24 13:12 ammen99