Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Random Crash #2145

Closed
killown opened this issue Feb 16, 2024 · 8 comments · Fixed by #2165
Closed

Random Crash #2145

killown opened this issue Feb 16, 2024 · 8 comments · Fixed by #2165
Labels
Milestone

Comments

@killown
Copy link
Contributor

killown commented Feb 16, 2024

steps to reproduce:
1 - two monitors, left monitor with no panels, no widgets, open some windows there the activate then scale plugin and let activated

2 - on the right monitor open a window drag it, move the the left monitor and drag it to the top and it will maximize while the activated scale will stays behind

3 - do not click anywhere, just by using the follow focus, let it focus in the maximized window, then toggle the scale again, this will crash the compositor

AddressSanitizer:DEADLYSIGNAL
=================================================================
==62206==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000080 (pc 0x798749d881cb bp 0x7ffd3ca87fb0 sp 0x7ffd3ca86860 T0)
==62206==The signal is caused by a READ memory access.
==62206==Hint: address points to the zero page.
    #0 0x798749d881cb in wayfire_scale::layout_slots(std::vector<nonstd::observer_ptr<wf::toplevel_view_interface_t>, std::allocator<nonstd::observer_ptr<wf::toplevel_view_interface_t> > >) ../plugins/scale/scale.cpp:969
    #1 0x798749dd219e in wayfire_scale::view_geometry_changed::{lambda(wf::view_geometry_changed_signal*)#1}::operator()(wf::view_geometry_changed_signal*) const ../plugins/scale/scale.cpp:1207
    #2 0x798749dd219e in void std::__invoke_impl<void, wayfire_scale::view_geometry_changed::{lambda(wf::view_geometry_changed_signal*)#1}&, wf::view_geometry_changed_signal*>(std::__invoke_other, wayfire_scale::view_geometry_changed::{lambda(wf::view_geometry_changed_signal*)#1}&, wf::view_geometry_changed_signal*&&) /usr/include/c++/13.2.1/bits/invoke.h:61
    #3 0x798749dd219e in std::enable_if<is_invocable_r_v<void, wayfire_scale::view_geometry_changed::{lambda(wf::view_geometry_changed_signal*)#1}&, wf::view_geometry_changed_signal*>, void>::type std::__invoke_r<void, wayfire_scale::view_geometry_changed::{lambda(wf::view_geometry_changed_signal*)#1}&, wf::view_geometry_changed_signal*>(wayfire_scale::view_geometry_changed::{lambda(wf::view_geometry_changed_signal*)#1}&, wf::view_geometry_changed_signal*&&) /usr/include/c++/13.2.1/bits/invoke.h:111
    #4 0x798749dd219e in std::_Function_handler<void (wf::view_geometry_changed_signal*), wayfire_scale::view_geometry_changed::{lambda(wf::view_geometry_changed_signal*)#1}>::_M_invoke(std::_Any_data const&, wf::view_geometry_changed_signal*&&) /usr/include/c++/13.2.1/bits/std_function.h:290
    #5 0x55631886520e in std::function<void (void*)>::operator()(void*) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #6 0x55631886520e in wf::signal::connection_t<wf::view_geometry_changed_signal>::emit(wf::view_geometry_changed_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #7 0x55631886520e in wf::signal::provider_t::emit<wf::view_geometry_changed_signal>(wf::view_geometry_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../src/api/wayfire/signal-provider.hpp:163
    #8 0x55631886520e in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::view_geometry_changed_signal>(wf::view_geometry_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::view_geometry_changed_signal>(wf::view_geometry_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/13.2.1/bits/invoke.h:61
    #9 0x55631886520e in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::view_geometry_changed_signal>(wf::view_geometry_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::view_geometry_changed_signal>(wf::view_geometry_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::view_geometry_changed_signal>(wf::view_geometry_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/13.2.1/bits/invoke.h:111
    #10 0x55631886520e in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::view_geometry_changed_signal>(wf::view_geometry_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/13.2.1/bits/std_function.h:290
    #11 0x5563186beb77 in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #12 0x5563186beb77 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 0x55631884c33d in void wf::signal::provider_t::emit<wf::view_geometry_changed_signal>(wf::view_geometry_changed_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #14 0x55631884c33d in wf::view_implementation::emit_geometry_changed_signal(nonstd::observer_ptr<wf::toplevel_view_interface_t>, wlr_box) ../src/view/view-impl.cpp:45
    #15 0x55631884ede3 in wf::view_implementation::emit_toplevel_state_change_signals(nonstd::observer_ptr<wf::toplevel_view_interface_t>, wf::toplevel_state_t const&) ../src/view/view-impl.cpp:112
    #16 0x5563188903f3 in wf::xdg_toplevel_view_t::handle_toplevel_state_changed(wf::toplevel_state_t) ../src/view/xdg-shell/xdg-toplevel-view.cpp:324
    #17 0x5563188909a5 in operator() ../src/view/xdg-shell/xdg-toplevel-view.cpp:173
    #18 0x5563188909a5 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++/13.2.1/bits/invoke.h:61
    #19 0x5563188909a5 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++/13.2.1/bits/invoke.h:111
    #20 0x5563188909a5 in _M_invoke /usr/include/c++/13.2.1/bits/std_function.h:290
    #21 0x55631886649e in std::function<void (void*)>::operator()(void*) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #22 0x55631886649e 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
    #23 0x55631886649e 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
    #24 0x55631886649e 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++/13.2.1/bits/invoke.h:61
    #25 0x55631886649e 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++/13.2.1/bits/invoke.h:111
    #26 0x55631886649e 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++/13.2.1/bits/std_function.h:290
    #27 0x5563186beb77 in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #28 0x5563186beb77 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
    #29 0x5563188823d5 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
    #30 0x5563188823d5 in wf::xdg_toplevel_t::apply() ../src/view/xdg-shell/xdg-toplevel.cpp:137
    #31 0x5563187922a8 in wf::txn::transaction_t::apply(bool) ../src/core/txn/transaction.cpp:71
    #32 0x55631879586e in operator() ../src/core/txn/transaction.cpp:28
    #33 0x55631886628e in std::function<void (void*)>::operator()(void*) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #34 0x55631886628e in wf::signal::connection_t<wf::txn::object_ready_signal>::emit(wf::txn::object_ready_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #35 0x55631886628e 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
    #36 0x55631886628e 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++/13.2.1/bits/invoke.h:61
    #37 0x55631886628e 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++/13.2.1/bits/invoke.h:111
    #38 0x55631886628e 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++/13.2.1/bits/std_function.h:290
    #39 0x5563186beb77 in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #40 0x5563186beb77 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
    #41 0x5563188698da in void wf::signal::provider_t::emit<wf::txn::object_ready_signal>(wf::txn::object_ready_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #42 0x5563188698da in wf::txn::emit_object_ready(wf::txn::transaction_object_t*) ../src/api/wayfire/txn/transaction-object.hpp:66
    #43 0x5563188698da in wf::xdg_toplevel_t::emit_ready() ../src/view/xdg-shell/xdg-toplevel.cpp:238
    #44 0x5563188741b7 in wf::xdg_toplevel_t::emit_ready() ../src/view/xdg-shell/xdg-toplevel.cpp:89
    #45 0x5563188741b7 in wf::xdg_toplevel_t::commit() ../src/view/xdg-shell/xdg-toplevel.cpp:105
    #46 0x55631878e56e in wf::txn::transaction_t::commit() ../src/core/txn/transaction.cpp:54
    #47 0x556318790589 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:110
    #48 0x556318790589 in wf::txn::transaction_manager_t::impl::consider_commit() ../src/core/txn/transaction-manager-impl.hpp:87
    #49 0x556318791a70 in wf::txn::transaction_manager_t::impl::schedule_transaction(std::unique_ptr<wf::txn::transaction_t, std::default_delete<wf::txn::transaction_t> >) ../src/core/txn/transaction-manager-impl.hpp:38
    #50 0x556318798470 in wf::txn::transaction_manager_t::schedule_transaction(std::unique_ptr<wf::txn::transaction_t, std::default_delete<wf::txn::transaction_t> >) ../src/core/txn/transaction-manager.cpp:19
    #51 0x5563187a31c6 in wf::txn::transaction_manager_t::schedule_object(std::shared_ptr<wf::txn::transaction_object_t>) ../src/core/txn/transaction-manager.cpp:26
    #52 0x556318854c1b in wf::toplevel_view_interface_t::move(int, int) ../src/view/toplevel-view.cpp:193
    #53 0x798749ddd917 in wf::move_drag::adjust_view_on_output(wf::move_drag::drag_done_signal*) ../plugins/common/wayfire/plugins/common/move-drag-interface.hpp:783
    #54 0x798749ddd917 in wayfire_scale::on_drag_done::{lambda(wf::move_drag::drag_done_signal*)#1}::operator()(wf::move_drag::drag_done_signal*) const ../plugins/scale/scale.cpp:1327
    #55 0x798749ddd917 in void std::__invoke_impl<void, wayfire_scale::on_drag_done::{lambda(wf::move_drag::drag_done_signal*)#1}&, wf::move_drag::drag_done_signal*>(std::__invoke_other, wayfire_scale::on_drag_done::{lambda(wf::move_drag::drag_done_signal*)#1}&, wf::move_drag::drag_done_signal*&&) /usr/include/c++/13.2.1/bits/invoke.h:61
    #56 0x798749ddd917 in std::enable_if<is_invocable_r_v<void, wayfire_scale::on_drag_done::{lambda(wf::move_drag::drag_done_signal*)#1}&, wf::move_drag::drag_done_signal*>, void>::type std::__invoke_r<void, wayfire_scale::on_drag_done::{lambda(wf::move_drag::drag_done_signal*)#1}&, wf::move_drag::drag_done_signal*>(wayfire_scale::on_drag_done::{lambda(wf::move_drag::drag_done_signal*)#1}&, wf::move_drag::drag_done_signal*&&) /usr/include/c++/13.2.1/bits/invoke.h:111
    #57 0x798749ddd917 in std::_Function_handler<void (wf::move_drag::drag_done_signal*), wayfire_scale::on_drag_done::{lambda(wf::move_drag::drag_done_signal*)#1}>::_M_invoke(std::_Any_data const&, wf::move_drag::drag_done_signal*&&) /usr/include/c++/13.2.1/bits/std_function.h:290
    #58 0x798749f21b81 in std::function<void (wf::wall_frame_event_t*)>::operator()(wf::wall_frame_event_t*) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #59 0x798749f21b81 in wf::signal::connection_t<wf::move_drag::drag_done_signal>::emit(wf::move_drag::drag_done_signal*) ../src/api/wayfire/signal-provider.hpp:107
    #60 0x798749f21b81 in wf::signal::provider_t::emit<wf::move_drag::drag_done_signal>(wf::move_drag::drag_done_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../src/api/wayfire/signal-provider.hpp:163
    #61 0x798749f21b81 in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::move_drag::drag_done_signal>(wf::move_drag::drag_done_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::move_drag::drag_done_signal>(wf::move_drag::drag_done_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/13.2.1/bits/invoke.h:61
    #62 0x798749f21b81 in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::move_drag::drag_done_signal>(wf::move_drag::drag_done_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::move_drag::drag_done_signal>(wf::move_drag::drag_done_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::move_drag::drag_done_signal>(wf::move_drag::drag_done_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/13.2.1/bits/invoke.h:111
    #63 0x798749f21b81 in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::move_drag::drag_done_signal>(wf::move_drag::drag_done_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/13.2.1/bits/std_function.h:290
    #64 0x798749da3322 in std::function<void (wf::region_t const&)>::operator()(wf::region_t const&) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #65 0x798749da3322 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
    #66 0x798749d5fd20 in void wf::signal::provider_t::emit<wf::move_drag::drag_done_signal>(wf::move_drag::drag_done_signal*) ../src/api/wayfire/signal-provider.hpp:159
    #67 0x798749d5fd20 in wf::move_drag::core_drag_t::handle_input_released() ../plugins/common/wayfire/plugins/common/move-drag-interface.hpp:645
    #68 0x798749d754af in wayfire_scale::process_input(unsigned int, unsigned int, wf::pointf_t) ../plugins/scale/scale.cpp:486
    #69 0x5563187dc9bb in wf::pointer_t::send_button(wlr_pointer_button_event*, bool) ../src/core/seat/pointer.cpp:279
    #70 0x5563187f763a in wf::pointer_t::handle_pointer_button(wlr_pointer_button_event*, wf::input_event_processing_mode_t) ../src/core/seat/pointer.cpp:231
    #71 0x5563187f8090 in operator() ../src/core/seat/cursor.cpp:70
    #72 0x5563187f8090 in __invoke_impl<void, wf::cursor_t::setup_listeners()::<lambda(void*)>&, void*> /usr/include/c++/13.2.1/bits/invoke.h:61
    #73 0x5563187f8090 in __invoke_r<void, wf::cursor_t::setup_listeners()::<lambda(void*)>&, void*> /usr/include/c++/13.2.1/bits/invoke.h:111
    #74 0x5563187f8090 in _M_invoke /usr/include/c++/13.2.1/bits/std_function.h:290
    #75 0x5563186a2629 in std::function<void (void*)>::operator()(void*) const /usr/include/c++/13.2.1/bits/std_function.h:591
    #76 0x5563186a2629 in wf::wl_listener_wrapper::emit(void*) ../src/wl-listener-wrapper.tpp:57
    #77 0x5563186a2629 in handle_wrapped_listener ../src/wl-listener-wrapper.tpp:10
    #78 0x79876fb2e01d in wl_signal_emit_mutable (/usr/lib/libwayland-server.so.0+0xa01d) (BuildId: d943a6a6069d1b5293dad7c842d26ce407ebdd19)
    #79 0x79876fb2e01d in wl_signal_emit_mutable (/usr/lib/libwayland-server.so.0+0xa01d) (BuildId: d943a6a6069d1b5293dad7c842d26ce407ebdd19)
    #80 0x79876f129635 in handle_pointer_button ../subprojects/wlroots/backend/libinput/pointer.c:84
    #81 0x79876f129635 in handle_libinput_event ../subprojects/wlroots/backend/libinput/events.c:173
    #82 0x79876f129635 in handle_libinput_readable ../subprojects/wlroots/backend/libinput/backend.c:59
    #83 0x79876f129635 in handle_libinput_readable ../subprojects/wlroots/backend/libinput/backend.c:49
    #84 0x79876fb2fae1 in wl_event_loop_dispatch (/usr/lib/libwayland-server.so.0+0xbae1) (BuildId: d943a6a6069d1b5293dad7c842d26ce407ebdd19)
    #85 0x79876fb302d6 in wl_display_run (/usr/lib/libwayland-server.so.0+0xc2d6) (BuildId: d943a6a6069d1b5293dad7c842d26ce407ebdd19)
    #86 0x55631869ce00 in main ../src/main.cpp:418
    #87 0x79876e957ccf  (/usr/lib/libc.so.6+0x25ccf) (BuildId: c0caa0b7709d3369ee575fcd7d7d0b0fc48733af)
    #88 0x79876e957d89 in __libc_start_main (/usr/lib/libc.so.6+0x25d89) (BuildId: c0caa0b7709d3369ee575fcd7d7d0b0fc48733af)
    #89 0x5563186a1fd4 in _start (/usr/bin/wayfire+0xf3fd4) (BuildId: 367fb9237087e3e229e3b0b156e04c3b154d0c04)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV ../plugins/scale/scale.cpp:969 in wayfire_scale::layout_slots(std::vector<nonstd::observer_ptr<wf::toplevel_view_interface_t>, std::allocator<nonstd::observer_ptr<wf::toplevel_view_interface_t> > >)
==62206==ABORTING
(EE) failed to read Wayland events: Connection reset by peer
@killown killown added the bug label Feb 16, 2024
@ammen99 ammen99 added this to the 0.8.1 milestone Feb 17, 2024
@ammen99
Copy link
Member

ammen99 commented Feb 25, 2024

I cannot reproduce this bug. @killown does this happen with default Wayfire settings, no patches applied, no custom IPC scripts?

@killown
Copy link
Contributor Author

killown commented Feb 25, 2024

new way to reproduce, start scale on both monitors, have more than 1 view in each monitor, move a view from outputx to outputy, view will get maximized, don´t do anything at this point except activating scale again then wayfire will crash

@killown
Copy link
Contributor Author

killown commented Feb 25, 2024

wayfire with default wayfire.ini and new build without patches, the compositor will crash by just moving views between monitors while scale is active on both

@killown
Copy link
Contributor Author

killown commented Feb 26, 2024

still not fixed, could you try this test, will crash

#!/bin/env python3

import wftest as wt


def is_gui() -> bool:
    return False


# This test opens gcs and weston-terminal on two outputs, starts scale and drags the window to the scale-active-output.
# Then it tries to maximize the dragged view, which should be dropped to scale instead.
class WTest(wt.WayfireTest):
    def prepare(self):
        return self.require_test_clients(["weston-terminal", "gtk_color_switcher"])

    def _run(self):
        self.socket.create_wayland_output()
        self.socket.run("weston-terminal")
        self.socket.run("gtk_color_switcher gcs")
        self.wait_for_clients(2)

        layout = {}
        layout["gcs"] = (0, 0, 500, 500, "WL-1")
        layout["nil"] = (0, 0, 500, 500, "WL-2")
        self.socket.layout_views(layout)
        self.wait_for_clients(2)

        # Focus WL-1 and start scale
        self.socket.move_cursor(250, 250)
        self.socket.click_button("BTN_LEFT", "full")
        self.socket.press_key("KEY_S")

        # Focus WL-2 and drag weston-terminal to WL-1
        self.click_and_drag("BTN_LEFT", 750, 5, 250, 0, release=True)
        self.socket.run("weston-terminal")
        self.socket.run("gtk_color_switcher gcs")
        self.wait_for_clients(2)
        self.socket.press_key("KEY_S")
        self.wait_for_clients(1)
        self.socket.move_cursor(250, 250)
        self.socket.click_button("BTN_LEFT", "full")
        self.click_and_drag("BTN_LEFT", 600, 250, 250, 0, release=True)
        self.wait_for_clients(1)
        self.socket.move_cursor(250, 250)
        self.socket.click_button("BTN_LEFT", "full")
        self.click_and_drag("BTN_LEFT", 600, 250, 250, 0, release=True)

        self.wait_for_clients(200)

@killown
Copy link
Contributor Author

killown commented Mar 5, 2024

does it help?

EE 05-03-24 11:24:09.644 - #1  signal_handler(int) ../src/main.cpp:133
EE 05-03-24 11:24:09.655 - #2  __sigaction ??:?
EE 05-03-24 11:24:09.709 - #3  wayfire_scale::layout_slots(std::vector<nonstd::observer_ptr<wf::toplevel_view_interface_t>, std::allocator<nonstd::observer_ptr<wf::toplevel_view_interface_t> > >) :?
EE 05-03-24 11:24:09.761 - #4  std::_Function_handler<void (wf::view_geometry_changed_signal*), wayfire_scale::view_geometry_changed::{lambda(wf::view_geometry_changed_signal*)#1}>::_M_invoke(std::_Any_data const&, wf::view_geometry_changed_signal*&&) ??:?
EE 05-03-24 11:24:09.902 - #5  std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::view_geometry_changed_signal>(wf::view_geometry_changed_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) ??:?
EE 05-03-24 11:24:10.037 - #6  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:74 (discriminator 1)
EE 05-03-24 11:24:10.174 - #7  wf::view_implementation::emit_geometry_changed_signal(nonstd::observer_ptr<wf::toplevel_view_interface_t>, wlr_box) ??:?
EE 05-03-24 11:24:10.317 - #8  wf::view_implementation::emit_toplevel_state_change_signals(nonstd::observer_ptr<wf::toplevel_view_interface_t>, wf::toplevel_state_t const&) ??:?
EE 05-03-24 11:24:10.455 - #9  wf::xdg_toplevel_view_t::handle_toplevel_state_changed(wf::toplevel_state_t) ??:?
EE 05-03-24 11:24:10.596 - #10 std::_Function_handler<void (wf::xdg_toplevel_applied_state_signal*), wf::xdg_toplevel_view_t::xdg_toplevel_view_t(wlr_xdg_toplevel*)::{lambda(wf::xdg_toplevel_applied_state_signal*)#1}>::_M_invoke(std::_Any_data const&, wf::xdg_toplevel_applied_state_signal*&&) :?
EE 05-03-24 11:24:10.738 - #11 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*&) ??:?
EE 05-03-24 11:24:10.872 - #12 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:74 (discriminator 1)
EE 05-03-24 11:24:11.010 - #13 wf::xdg_toplevel_t::apply() ??:?
EE 05-03-24 11:24:11.150 - #14 wf::txn::transaction_t::apply(bool) ??:?
EE 05-03-24 11:24:11.293 - #15 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*&) ??:?
EE 05-03-24 11:24:11.435 - #16 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:74 (discriminator 1)
EE 05-03-24 11:24:11.578 - #17 wf::xdg_toplevel_t::emit_ready() [clone .part.0] :?
EE 05-03-24 11:24:11.721 - #18 wf::txn::transaction_t::commit() ??:?
EE 05-03-24 11:24:11.864 - #19 wf::txn::transaction_manager_t::impl::consider_commit() :?
EE 05-03-24 11:24:12.007 - #20 wf::txn::transaction_manager_t::schedule_transaction(std::unique_ptr<wf::txn::transaction_t, std::default_delete<wf::txn::transaction_t> >) ??:?
EE 05-03-24 11:24:12.143 - #21 wf::txn::transaction_manager_t::schedule_object(std::shared_ptr<wf::txn::transaction_object_t>) ??:?
EE 05-03-24 11:24:12.279 - #22 wf::toplevel_view_interface_t::move(int, int) ??:?
EE 05-03-24 11:24:12.332 - #23 wf::toplevel_view_interface_t::pending_fullscreen() const ../src/api/wayfire/toplevel-view.hpp:129
EE 05-03-24 11:24:12.380 - #24 std::_Function_handler<void (wf::move_drag::drag_done_signal*), wayfire_scale::on_drag_done::{lambda(wf::move_drag::drag_done_signal*)#1}>::_M_invoke(std::_Any_data const&, wf::move_drag::drag_done_signal*&&) ??:?
EE 05-03-24 11:24:12.422 - #25 std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::move_drag::drag_done_signal>(wf::move_drag::drag_done_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) ??:?
EE 05-03-24 11:24:12.470 - #26 wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) :?
EE 05-03-24 11:24:12.520 - #27 std::function<void (wf::signal::connection_base_t*&)>::~function() /usr/include/c++/13.2.1/bits/std_function.h:334
EE 05-03-24 11:24:12.570 - #28 wayfire_scale::process_input(unsigned int, unsigned int, wf::pointf_t) :?
EE 05-03-24 11:24:12.706 - #29 wf::pointer_t::handle_pointer_button(wlr_pointer_button_event*, wf::input_event_processing_mode_t) ??:?
EE 05-03-24 11:24:12.840 - #30 std::_Function_handler<void (void*), wf::cursor_t::setup_listeners()::{lambda(void*)#2}>::_M_invoke(std::_Any_data const&, void*&&) :?
EE 05-03-24 11:24:12.973 - #31 wf::handle_wrapped_listener(wl_listener*, void*) ../src/wl-listener-wrapper.tpp:11
EE 05-03-24 11:24:12.982 - #32 wl_signal_emit_mutable ??:?
EE 05-03-24 11:24:12.991 - #33 wl_signal_emit_mutable ??:?
EE 05-03-24 11:24:13.014 - #34 handle_libinput_readable :?
EE 05-03-24 11:24:13.023 - #35 wl_event_loop_dispatch ??:?
EE 05-03-24 11:24:13.032 - #36 wl_display_run ??:?
EE 05-03-24 11:24:13.163 - #37 main ../src/main.cpp:425
EE 05-03-24 11:24:13.173 - #38 __libc_init_first ??:?
EE 05-03-24 11:24:13.183 - #39 __libc_start_main ??:?
EE 05-03-24 11:24:13.317 - #40 _start ??:?
(EE) failed to read Wayland events: Broken pipe

@killown
Copy link
Contributor Author

killown commented Mar 9, 2024

#!/bin/env python3

import wftest as wt


def is_gui() -> bool:
    return False


# This test opens gcs and weston-terminal on two outputs, starts scale and drags the window to the scale-active-output.
# Then it tries to maximize the dragged view, which should be dropped to scale instead.
class WTest(wt.WayfireTest):
    def prepare(self):
        return self.require_test_clients(["weston-terminal", "gtk_color_switcher"])

    def _run(self):
        self.socket.create_wayland_output()
        self.socket.run("weston-terminal")
        self.socket.run("gtk_color_switcher gcs")
        self.wait_for_clients(2)

        layout = {}
        layout["gcs"] = (0, 0, 500, 500, "WL-1")
        layout["nil"] = (0, 0, 500, 500, "WL-2")
        self.socket.layout_views(layout)
        self.wait_for_clients(2)

        # Focus WL-1 and start scale
        self.socket.move_cursor(250, 250)
        self.socket.click_button("BTN_LEFT", "full")
        self.socket.press_key("KEY_S")

        # Focus WL-2 and drag weston-terminal to WL-1
        self.click_and_drag("BTN_LEFT", 750, 5, 250, 0, release=True)
        self.socket.run("weston-terminal")
        self.socket.run("gtk_color_switcher gcs")
        self.wait_for_clients(2)
        self.socket.press_key("KEY_S")
        self.wait_for_clients(1)
        self.socket.move_cursor(250, 250)
        self.socket.click_button("BTN_LEFT", "full")
        self.click_and_drag("BTN_LEFT", 600, 250, 250, 0, release=True)
        self.wait_for_clients(1)
        self.socket.press_key("KEY_S")

        self.wait_for_clients(200)

@soreau
Copy link
Member

soreau commented Mar 9, 2024

Does this patch help?

@killown
Copy link
Contributor Author

killown commented Mar 9, 2024

Does this patch help?

that works, thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants