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

make glib loop play well with SIGINT/SIGTERM #241

Merged
merged 1 commit into from
Jun 27, 2024

Conversation

ssfdust
Copy link
Contributor

@ssfdust ssfdust commented Jun 27, 2024

I try to fix #240 with the patch, but it results in a segement fault.
I tested it in qemu with virgl.

The whole log:

II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1556] Scanning DRM connectors on /dev/dri/card1
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1607] Found connector 'Virtual-1'
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1632] 'Virtual-1' connected
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1440] Detected modes:
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1280x800 @ 74.994 Hz (preferred)
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   5120x2160 @ 50.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   4096x2160 @ 50.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   3840x2160 @ 60.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   3840x2160 @ 59.940 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   3840x2160 @ 50.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1920x1440 @ 60.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   2560x1080 @ 50.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1856x1392 @ 59.995 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1792x1344 @ 60.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   2048x1152 @ 60.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1920x1200 @ 59.885 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1920x1080 @ 60.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1920x1080 @ 50.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1600x1200 @ 60.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1680x1050 @ 59.954 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1400x1050 @ 59.978 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1280x1024 @ 60.020 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1440x900 @ 59.887 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1280x960 @ 60.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1360x768 @ 60.015 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1280x768 @ 59.870 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   1024x768 @ 60.004 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   800x600 @ 60.317 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   640x480 @ 60.000 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1468]   640x480 @ 59.940 Hz 
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1488] Physical size: 320x200
II 27-06-24 10:23:18.257 - [backend/drm/drm.c:1668] connector Virtual-1: Requesting modeset
II 27-06-24 10:23:18.258 - [wayfire-git/src/core/output-layout.cpp:1177] new output: Virtual-1 ("Red Hat, Inc. QEMU Monitor (null)")
II 27-06-24 10:23:18.258 - [wayfire-git/src/core/output-layout.cpp:460] loaded mode auto
II 27-06-24 10:23:18.261 - [backend/drm/drm.c:790] connector Virtual-1: Modesetting with 1280x800 @ 74.994 Hz
false
false
false
II 27-06-24 10:23:18.295 - [src/glib-main-loop.cpp:53] creating main loop
EE 27-06-24 10:23:18.296 - [types/wlr_cursor.c:1174] Cannot map device "Power Button" to output (not found in this cursor)
EE 27-06-24 10:23:18.296 - [types/wlr_cursor.c:1174] Cannot map device "AT Translated Set 2 keyboard" to output (not found in this cursor)
II 27-06-24 10:23:25.702 - [wayfire-git/src/core/seat/input-manager.cpp:106] remove input: VirtualPS/2 VMware VMMouse
II 27-06-24 10:23:25.702 - [wayfire-git/src/core/seat/input-manager.cpp:106] remove input: VirtualPS/2 VMware VMMouse
II 27-06-24 10:23:25.702 - [wayfire-git/src/core/seat/input-manager.cpp:106] remove input: AT Translated Set 2 keyboard
II 27-06-24 10:23:25.703 - [wayfire-git/src/core/seat/input-manager.cpp:106] remove input: Power Button
II 27-06-24 10:23:25.876 - [wayfire-git/src/core/output-layout.cpp:1212] remove output: Virtual-1
II 27-06-24 10:23:25.876 - [wayfire-git/src/core/output-layout.cpp:1125] new output: NOOP-1
II 27-06-24 10:23:25.877 - [wayfire-git/src/core/output-layout.cpp:460] loaded mode auto
II 27-06-24 10:23:25.877 - [wayfire-git/src/core/output-layout.cpp:634] Couldn't find matching mode 1280x720@0 for output NOOP-1. Trying to use custom mode(might not work)
EE 27-06-24 10:23:25.880 - [wayfire-git/src/core/output-layout.cpp:533] disabling output: Virtual-1
II 27-06-24 10:23:25.881 - [wayfire-git/src/core/output-layout.cpp:163] transfer views from Virtual-1 -> NOOP-1
../wayfire-git/src/output/output.cpp:184:49: runtime error: member call on null pointer of type 'struct output_layout_t'
../wayfire-git/src/core/output-layout.cpp:1747:12: runtime error: member access within null pointer of type 'struct output_layout_t'
AddressSanitizer:DEADLYSIGNAL
=================================================================
==11978==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000038 (pc 0x608940cf73fd bp 0x7ffd759a5b60 sp 0x7ffd759a5ab0 T0)
==11978==The signal is caused by a READ memory access.
==11978==Hint: address points to the zero page.
    #0 0x608940cf73fd in std::__uniq_ptr_impl<wf::output_layout_t::impl, std::default_delete<wf::output_layout_t::impl> >::_M_ptr() const /usr/include/c++/14.1.1/bits/unique_ptr.h:193
    #1 0x608940cf73fd in std::unique_ptr<wf::output_layout_t::impl, std::default_delete<wf::output_layout_t::impl> >::get() const /usr/include/c++/14.1.1/bits/unique_ptr.h:464
    #2 0x608940cf73fd in std::unique_ptr<wf::output_layout_t::impl, std::default_delete<wf::output_layout_t::impl> >::operator->() const /usr/include/c++/14.1.1/bits/unique_ptr.h:457
    #3 0x608940cf73fd in wf::output_layout_t::get_handle() ../wayfire-git/src/core/output-layout.cpp:1747
    #4 0x608940cf73fd in wf::output_t::get_layout_geometry() const ../wayfire-git/src/output/output.cpp:183
    #5 0x6089405d2277 in wf::scene::output_node_t::get_bounding_box() ../wayfire-git/src/core/scene.cpp:450
    #6 0x608940596a97 in wf::scene::node_t::set_children_unchecked(std::vector<std::shared_ptr<wf::scene::node_t>, std::allocator<std::shared_ptr<wf::scene::node_t> > >) ../wayfire-git/src/core/scene.cpp:127
    #7 0x608940599afa in wf::scene::floating_inner_node_t::set_children_list(std::vector<std::shared_ptr<wf::scene::node_t>, std::allocator<std::shared_ptr<wf::scene::node_t> > >) ../wayfire-git/src/core/scene.cpp:120
    #8 0x608940cfd6ac in wf::output_impl_t::~output_impl_t() ../wayfire-git/src/output/output.cpp:154
    #9 0x608940443f88 in wf::output_impl_t::~output_impl_t() ../wayfire-git/src/output/output.cpp:159
    #10 0x608940443f88 in std::default_delete<wf::output_impl_t>::operator()(wf::output_impl_t*) const /usr/include/c++/14.1.1/bits/unique_ptr.h:93
    #11 0x608940443f88 in std::unique_ptr<wf::output_impl_t, std::default_delete<wf::output_impl_t> >::~unique_ptr() /usr/include/c++/14.1.1/bits/unique_ptr.h:398
    #12 0x608940443f88 in wf::output_layout_output_t::~output_layout_output_t() ../wayfire-git/src/core/output-layout.cpp:258
    #13 0x60894044b3b0 in std::default_delete<wf::output_layout_output_t>::operator()(wf::output_layout_output_t*) const /usr/include/c++/14.1.1/bits/unique_ptr.h:93
    #14 0x60894044b3b0 in std::default_delete<wf::output_layout_output_t>::operator()(wf::output_layout_output_t*) const /usr/include/c++/14.1.1/bits/unique_ptr.h:87
    #15 0x60894044b3b0 in std::unique_ptr<wf::output_layout_output_t, std::default_delete<wf::output_layout_output_t> >::~unique_ptr() /usr/include/c++/14.1.1/bits/unique_ptr.h:398
    #16 0x60894044b3b0 in wf::output_layout_t::impl::~impl() ../wayfire-git/src/core/output-layout.cpp:927
    #17 0x60894044b3b0 in std::default_delete<wf::output_layout_t::impl>::operator()(wf::output_layout_t::impl*) const /usr/include/c++/14.1.1/bits/unique_ptr.h:93
    #18 0x60894044b3b0 in std::default_delete<wf::output_layout_t::impl>::operator()(wf::output_layout_t::impl*) const /usr/include/c++/14.1.1/bits/unique_ptr.h:87
    #19 0x60894044b3b0 in std::unique_ptr<wf::output_layout_t::impl, std::default_delete<wf::output_layout_t::impl> >::~unique_ptr() /usr/include/c++/14.1.1/bits/unique_ptr.h:398
    #20 0x60894044b3b0 in wf::output_layout_t::~output_layout_t() ../wayfire-git/src/core/output-layout.cpp:1743
    #21 0x608940629990 in std::default_delete<wf::output_layout_t>::operator()(wf::output_layout_t*) const /usr/include/c++/14.1.1/bits/unique_ptr.h:93
    #22 0x608940629990 in std::default_delete<wf::output_layout_t>::operator()(wf::output_layout_t*) const /usr/include/c++/14.1.1/bits/unique_ptr.h:87
    #23 0x608940629990 in std::__uniq_ptr_impl<wf::output_layout_t, std::default_delete<wf::output_layout_t> >::reset(wf::output_layout_t*) /usr/include/c++/14.1.1/bits/unique_ptr.h:205
    #24 0x608940629990 in std::unique_ptr<wf::output_layout_t, std::default_delete<wf::output_layout_t> >::reset(wf::output_layout_t*) /usr/include/c++/14.1.1/bits/unique_ptr.h:503
    #25 0x608940629990 in wf::compositor_core_impl_t::~compositor_core_impl_t() ../wayfire-git/src/core/core.cpp:581
    #26 0x60894062c7a9 in wf::compositor_core_impl_t::~compositor_core_impl_t() ../wayfire-git/src/core/core.cpp:582
    #27 0x60894062c7a9 in std::default_delete<wf::compositor_core_impl_t>::operator()(wf::compositor_core_impl_t*) const /usr/include/c++/14.1.1/bits/unique_ptr.h:93
    #28 0x60894062c7a9 in std::unique_ptr<wf::compositor_core_impl_t, std::default_delete<wf::compositor_core_impl_t> >::~unique_ptr() /usr/include/c++/14.1.1/bits/unique_ptr.h:398
    #29 0x7fa443652fa0  (/usr/lib/libc.so.6+0x3efa0) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #30 0x7fa44365306d in exit (/usr/lib/libc.so.6+0x3f06d) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #31 0x7fa42df652e7 in auto wf::glib_main_loop_t::glib_loop_quit::{lambda(auto:1)#1}::operator()<wf::core_shutdown_signal*>(wf::core_shutdown_signal*) const ../src/glib-main-loop.cpp:95
    #32 0x7fa42df85446 in void std::__invoke_impl<void, wf::glib_main_loop_t::glib_loop_quit::{lambda(auto:1)#1}&, wf::core_shutdown_signal*>(std::__invoke_other, wf::glib_main_loop_t::glib_loop_quit::{lambda(auto:1)#1}&, wf::core_shutdown_signal*&&) /usr/include/c++/14.1.1/bits/invoke.h:61
    #33 0x7fa42df7eae4 in std::enable_if<is_invocable_r_v<void, wf::glib_main_loop_t::glib_loop_quit::{lambda(auto:1)#1}&, wf::core_shutdown_signal*>, void>::type std::__invoke_r<void, wf::glib_main_loop_t::glib_loop_quit::{lambda(auto:1)#1}&, wf::core_shutdown_signal*>(wf::glib_main_loop_t::glib_loop_quit::{lambda(auto:1)#1}&, wf::core_shutdown_signal*&&) /usr/include/c++/14.1.1/bits/invoke.h:111
    #34 0x7fa42df77a82 in std::_Function_handler<void (wf::core_shutdown_signal*), wf::glib_main_loop_t::glib_loop_quit::{lambda(auto:1)#1}>::_M_invoke(std::_Any_data const&, wf::core_shutdown_signal*&&) /usr/include/c++/14.1.1/bits/std_function.h:290
    #35 0x6089405f7bbd in std::function<void (void*)>::operator()(void*) const /usr/include/c++/14.1.1/bits/std_function.h:591
    #36 0x6089405f7bbd in wf::signal::connection_t<wf::core_shutdown_signal>::emit(wf::core_shutdown_signal*) ../wayfire-git/src/api/wayfire/signal-provider.hpp:107
    #37 0x6089405f7bbd in wf::signal::provider_t::emit<wf::core_shutdown_signal>(wf::core_shutdown_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../wayfire-git/src/api/wayfire/signal-provider.hpp:163
    #38 0x6089405f7bbd in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::core_shutdown_signal>(wf::core_shutdown_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::core_shutdown_signal>(wf::core_shutdown_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14.1.1/bits/invoke.h:61
    #39 0x6089405f7bbd in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::core_shutdown_signal>(wf::core_shutdown_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::core_shutdown_signal>(wf::core_shutdown_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::core_shutdown_signal>(wf::core_shutdown_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14.1.1/bits/invoke.h:111
    #40 0x6089405f7bbd in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::core_shutdown_signal>(wf::core_shutdown_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/14.1.1/bits/std_function.h:290
    #41 0x7fa42df701ae in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/14.1.1/bits/std_function.h:591
    #42 0x7fa42df69d6a in wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) /usr/include/wayfire/nonstd/safe-list.hpp:78
    #43 0x7fa42df6ac9b in void wf::signal::provider_t::emit<wf::core_shutdown_signal>(wf::core_shutdown_signal*) /usr/include/wayfire/signal-provider.hpp:159
    #44 0x7fa42df61bde in glib_signal_handler ../src/glib-main-loop.cpp:22
    #45 0x7fa4430fca88  (/usr/lib/libglib-2.0.so.0+0x5ca88) (BuildId: fc2beb0b0cf82dfd60aff155c797daa17b6bd70f)
    #46 0x7fa44315e9b6  (/usr/lib/libglib-2.0.so.0+0xbe9b6) (BuildId: fc2beb0b0cf82dfd60aff155c797daa17b6bd70f)
    #47 0x7fa4430fd786 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x5d786) (BuildId: fc2beb0b0cf82dfd60aff155c797daa17b6bd70f)
    #48 0x7fa42df65166 in auto wf::glib_main_loop_t::glib_loop_run::{lambda(auto:1)#1}::operator()<wf::core_startup_finished_signal*>(wf::core_startup_finished_signal*) const ../src/glib-main-loop.cpp:87
    #49 0x7fa42df84f62 in void std::__invoke_impl<void, wf::glib_main_loop_t::glib_loop_run::{lambda(auto:1)#1}&, wf::core_startup_finished_signal*>(std::__invoke_other, wf::glib_main_loop_t::glib_loop_run::{lambda(auto:1)#1}&, wf::core_startup_finished_signal*&&) /usr/include/c++/14.1.1/bits/invoke.h:61
    #50 0x7fa42df7df1f in std::enable_if<is_invocable_r_v<void, wf::glib_main_loop_t::glib_loop_run::{lambda(auto:1)#1}&, wf::core_startup_finished_signal*>, void>::type std::__invoke_r<void, wf::glib_main_loop_t::glib_loop_run::{lambda(auto:1)#1}&, wf::core_startup_finished_signal*>(wf::glib_main_loop_t::glib_loop_run::{lambda(auto:1)#1}&, wf::core_startup_finished_signal*&&) /usr/include/c++/14.1.1/bits/invoke.h:111
    #51 0x7fa42df77498 in std::_Function_handler<void (wf::core_startup_finished_signal*), wf::glib_main_loop_t::glib_loop_run::{lambda(auto:1)#1}>::_M_invoke(std::_Any_data const&, wf::core_startup_finished_signal*&&) /usr/include/c++/14.1.1/bits/std_function.h:290
    #52 0x6089405f73fd in std::function<void (void*)>::operator()(void*) const /usr/include/c++/14.1.1/bits/std_function.h:591
    #53 0x6089405f73fd in wf::signal::connection_t<wf::core_startup_finished_signal>::emit(wf::core_startup_finished_signal*) ../wayfire-git/src/api/wayfire/signal-provider.hpp:107
    #54 0x6089405f73fd in wf::signal::provider_t::emit<wf::core_startup_finished_signal>(wf::core_startup_finished_signal*)::{lambda(wf::signal::connection_base_t*)#1}::operator()(wf::signal::connection_base_t*) const ../wayfire-git/src/api/wayfire/signal-provider.hpp:163
    #55 0x6089405f73fd in void std::__invoke_impl<void, wf::signal::provider_t::emit<wf::core_startup_finished_signal>(wf::core_startup_finished_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(std::__invoke_other, wf::signal::provider_t::emit<wf::core_startup_finished_signal>(wf::core_startup_finished_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14.1.1/bits/invoke.h:61
    #56 0x6089405f73fd in std::enable_if<is_invocable_r_v<void, wf::signal::provider_t::emit<wf::core_startup_finished_signal>(wf::core_startup_finished_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::core_startup_finished_signal>(wf::core_startup_finished_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&>(wf::signal::provider_t::emit<wf::core_startup_finished_signal>(wf::core_startup_finished_signal*)::{lambda(wf::signal::connection_base_t*)#1}&, wf::signal::connection_base_t*&) /usr/include/c++/14.1.1/bits/invoke.h:111
    #57 0x6089405f73fd in std::_Function_handler<void (wf::signal::connection_base_t*&), wf::signal::provider_t::emit<wf::core_startup_finished_signal>(wf::core_startup_finished_signal*)::{lambda(wf::signal::connection_base_t*)#1}>::_M_invoke(std::_Any_data const&, wf::signal::connection_base_t*&) /usr/include/c++/14.1.1/bits/std_function.h:290
    #58 0x6089403cce7c in std::function<void (wf::signal::connection_base_t*&)>::operator()(wf::signal::connection_base_t*&) const /usr/include/c++/14.1.1/bits/std_function.h:591
    #59 0x6089403cce7c in wf::safe_list_t<wf::signal::connection_base_t*>::for_each(std::function<void (wf::signal::connection_base_t*&)>) ../wayfire-git/src/api/wayfire/nonstd/safe-list.hpp:78
    #60 0x6089405ebe7c in void wf::signal::provider_t::emit<wf::core_startup_finished_signal>(wf::core_startup_finished_signal*) ../wayfire-git/src/api/wayfire/signal-provider.hpp:159
    #61 0x6089405ebe7c in wf::compositor_core_impl_t::post_init() ../wayfire-git/src/core/core.cpp:243
    #62 0x608940346080 in main ../wayfire-git/src/main.cpp:479
    #63 0x7fa443639c87  (/usr/lib/libc.so.6+0x25c87) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #64 0x7fa443639d4b in __libc_start_main (/usr/lib/libc.so.6+0x25d4b) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #65 0x608940351c64 in _start (/usr/bin/wayfire+0x131c64) (BuildId: 6bb23cdcae028eb30a68f424984fbc0212d15a1d)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /usr/include/c++/14.1.1/bits/unique_ptr.h:193 in std::__uniq_ptr_impl<wf::output_layout_t::impl, std::default_delete<wf::output_layout_t::impl> >::_M_ptr() const
==11978==ABORTING

Fixes #240

@ssfdust ssfdust requested a review from ammen99 June 27, 2024 11:35
@ssfdust ssfdust force-pushed the fix240 branch 2 times, most recently from a681aa1 to 19acac8 Compare June 27, 2024 12:34
@ssfdust ssfdust marked this pull request as ready for review June 27, 2024 12:35
* Add glib signal handler
* Disconnect core_shutdown_signal when glib-main-loop quits
Copy link
Member

@ammen99 ammen99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@ammen99 ammen99 merged commit 377086d into WayfireWM:master Jun 27, 2024
3 checks passed
@ssfdust ssfdust deleted the fix240 branch June 27, 2024 13:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Can't terminate wayfire via kill -15 with glib-main-loop enabled
2 participants