Skip to content

Segfault in waybar::modules::sway::Language::set_current_layout #4777

@Invizory

Description

@Invizory

I've got the following segfault in Waybar 0.14.0:

Core was generated by `/nix/store/g2r7rc3p1d6m36d5y1ja53rkranfgxwr-waybar-0.14.0/bin/waybar -b bar-0'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f72f8702d18 in g_source_set_name_full (source=0x7f72300061a0, name=0x7f72f93b43f8 "[gtk+] gdk_frame_clock_paint_idle", is_static=0) at ../glib/gmain.c:2202
2202	 if (!source->priv->static_name)
[Current thread is 1 (Thread 0x7f725e7fc6c0 (LWP 35434))]
(gdb) list
2197	 /* setting back to NULL is allowed, just because it's
2198	  * weird if get_name can return NULL but you can't
2199	  * set that.
2200	  */
2201	
2202	 if (!source->priv->static_name)
2203	   g_free (source->name);
2204	
2205	 if (is_static)
2206	   source->name = (char *)name;
(gdb) bt full
#0  0x00007fe245702d18 in g_source_set_name_full (source=0x7fe188006400, name=0x7fe2463b43f8 "[gtk+] gdk_frame_clock_paint_idle", is_static=0) at ../glib/gmain.c:2202
        context = <optimized out>
        _g_boolean_var_89 = <optimized out>
        _g_boolean_var_90 = <optimized out>
        gaig_temp = <optimized out>
#1  0x00007fe245d10de9 in gtk_widget_add_tick_callback (widget=0x55bd49ab9f80 [gtkmm__GtkWindow], callback=callback@entry=0x7fe245afb960 <gtk_css_widget_node_queue_callback>, user_data=user_data@entry=0x55bd49a3f7f0, notify=notify@entry=0x0) at ../gtk/gtkwidget.c:5368
        priv = 0x55bd49ab9e90
        info = <optimized out>
        frame_clock = 0x55bd49d9d060 [GdkFrameClockIdle]
#2  0x00007fe245afb946 in gtk_css_widget_node_queue_validate (node=0x55bd49a3f7f0 [GtkCssWidgetNode]) at ../gtk/gtkcsswidgetnode.c:95
        widget_node = 0x55bd49a3f7f0 [GtkCssWidgetNode]
#3  0x00007fe245ad83cb in gtk_css_node_invalidate_style (cssnode=0x55bd49b58f40 [GtkCssWidgetNode]) at ../gtk/gtkcssnode.c:727
#4  gtk_css_node_invalidate (cssnode=cssnode@entry=0x55bd49b58f40 [GtkCssWidgetNode], change=<optimized out>, change@entry=1) at ../gtk/gtkcssnode.c:1372
#5  0x00007fe245ad8ad5 in gtk_css_node_remove_class (cssnode=0x55bd49b58f40 [GtkCssWidgetNode], style_class=<optimized out>) at ../gtk/gtkcssnode.c:1254
#6  0x000055bd41f1303a in waybar::modules::sway::Language::set_current_layout (this=this@entry=0x55bd49c632a0, current_layout="Russian") at ../src/modules/sway/language.cpp:128
#7  0x000055bd41f160bb in waybar::modules::sway::Language::onEvent (this=0x55bd49c632a0, res=...) at ../src/modules/sway/language.cpp:89
        lock = {_M_device = <optimized out>}
        payload = {static minLargestInt = -9223372036854775808, static maxLargestInt = 9223372036854775807, static maxLargestUInt = 18446744073709551615, static minInt = -2147483648, static maxInt = 2147483647, static maxUInt = 4294967295, static minInt64 = -9223372036854775808, static maxInt64 = 9223372036854775807, static maxUInt64 = 18446744073709551615, static defaultRealPrecision = 17, static maxUInt64AsDouble = 1.8446744073709552e+19, value_ = {int_ = 140606626094832, uint_ = 140606626094832, real_ = 6.9468903531101842e-310, bool_ = 240, string_ = 0x7fe188005ef0 "\205\343\030v\346\177", map_ = 0x7fe188005ef0}, bits_ = {value_type_ = 7, allocated_ = 0}, comments_ = {ptr_ = std::unique_ptr<struct std::array<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 3>> = {get() = 0x0}}, start_ = 35, limit_ = 295}
#8  0x000055bd41f06bfe in sigc::internal::signal_emit1<void, waybar::modules::sway::Ipc::ipc_response const&, sigc::nil>::emit (impl=0x55bd49b59c10, _A_a1=...) at /nix/store/blx56cg23z09bihhxlv4xsa3zb58irzp-libsigc++-2.12.1-dev/include/sigc++-2.0/sigc++/signal.h:1041
        slot = @0x55bd49b59c50: {<sigc::functor_base> = {<No data fields>}, rep_ = 0x55bd49b59b80, blocked_ = false}
        exec = {sig_ = 0x55bd49b59c10}
        slots = Python Exception <class 'gdb.error'>: value has been optimized out
{slots_ = <optimized out>, placeholder = }
#9  0x000055bd41f06af7 in sigc::signal1<void, waybar::modules::sway::Ipc::ipc_response const&, sigc::nil>::emit (this=0x55bd49c635c8, _A_a1=...) at /nix/store/blx56cg23z09bihhxlv4xsa3zb58irzp-libsigc++-2.12.1-dev/include/sigc++-2.0/sigc++/signal.h:2961
#10 waybar::modules::sway::Ipc::handleEvent (this=0x55bd49c635c8) at ../src/modules/sway/ipc/client.cpp:154
        res = {size = 297, type = 2147483669, payload = "{ \"change\": \"xkb_layout\", \"input\": { \"identifier\": \"0:0:wlr_virtual_keyboard_v1\", \"name\": \"wlr_virtual_keyboard_v1\", \"type\": \"keyboard\", \"repeat_delay\": 600, \"repeat_rate\": 25, \"xkb_layout_names\": [ \""...}
#11 0x000055bd41f150a7 in operator() (__closure=<optimized out>) at ../src/modules/sway/language.cpp:40
#12 std::__invoke_impl<void, waybar::modules::sway::Language::Language(const std::string&, const Json::Value&)::<lambda()>&> (__f=<optimized out>) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/invoke.h:63
#13 std::__invoke_r<void, waybar::modules::sway::Language::Language(const std::string&, const Json::Value&)::<lambda()>&> (__fn=<optimized out>) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/invoke.h:113
#14 std::_Function_handler<void(), waybar::modules::sway::Language::Language(const std::string&, const Json::Value&)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=<optimized out>) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/std_function.h:292
#15 0x000055bd41e5ce62 in std::function<void()>::operator() (this=0x55bd49b64720) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/std_function.h:593
#16 waybar::util::SleeperThread::operator=(std::function<void ()>)::{lambda()#1}::operator()() const (__closure=0x55bd49b64718) at ../include/util/sleeper_thread.hpp:48
#17 std::__invoke_impl<void, waybar::util::SleeperThread::operator=(std::function<void ()>)::{lambda()#1}>(std::__invoke_other, waybar::util::SleeperThread::operator=(std::function<void ()>)::{lambda()#1}&&) (__f=...) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/invoke.h:63
#18 std::__invoke<waybar::util::SleeperThread::operator=(std::function<void ()>)::{lambda()#1}>(waybar::util::SleeperThread::operator=(std::function<void ()>)::{lambda()#1}&&) (__fn=...) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/invoke.h:98
#19 std::thread::_Invoker<std::tuple<waybar::util::SleeperThread::operator=(std::function<void ()>)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x55bd49b64718) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/std_thread.h:303
#20 std::thread::_Invoker<std::tuple<waybar::util::SleeperThread::operator=(std::function<void ()>)::{lambda()#1}> >::operator()() (this=0x55bd49b64718) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/std_thread.h:310
#21 std::thread::_State_impl<std::thread::_Invoker<std::tuple<waybar::util::SleeperThread::operator=(std::function<void ()>)::{lambda()#1}> > >::_M_run() (this=0x55bd49b64710) at /nix/store/qarrb8yfby1yyypm32vabzgxgq3w41ma-gcc-15.2.0/include/c++/15.2.0/bits/std_thread.h:255
#22 0x00007fe244cf2ce4 in execute_native_thread_routine () at /nix/store/xc0ga87wdclrx54qjaryahkkmkmqi9qz-gcc-15.2.0-lib/lib/libstdc++.so.6
#23 0x00007fe24489be3c in start_thread (arg=<optimized out>) at pthread_create.c:447
        ret = <optimized out>
        pd = <optimized out>
        out = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140608169572032, 2201921418368590696, 140608169572032, 140721872088400, 2, 140721872088663, 2201921418353910632, 2200436341414765416}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
#24 0x00007fe2449246cc in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
(gdb) frame 6
#6  0x000055bd41f1303a in waybar::modules::sway::Language::set_current_layout (this=this@entry=0x55bd49c632a0, current_layout="Russian") at ../src/modules/sway/language.cpp:128
128	 label_.get_style_context()->remove_class(layout_.short_name);
(gdb) list
123	 // Call parent update
124	 ALabel::update();
125	}
126	
127	auto Language::set_current_layout(std::string current_layout) -> void {
128	 label_.get_style_context()->remove_class(layout_.short_name);
129	 layout_ = layouts_map_[current_layout];
130	 label_.get_style_context()->add_class(layout_.short_name);
131	}
132	
(gdb) p layout_
$1 = {full_name = "Russian", short_name = "ru", variant = "", short_description = "ru"}

I'm using the default configuration for the sway/language module.

Possibly related to #3702, #4751.

Metadata

Metadata

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions