Fractal crashes with SIGFPE when switching rooms
When switching between different rooms in UI, Fractal sometimes crashes.
Steps to reproduce
- Open Fractal
- Switch between different rooms until Fractal crashes.
Information
-
This bug is reproducible from the latest nightly build - Fractal Version: 5-alpha1-0e3d4623
- OS Version: Arch Linux Rolling
- Installation Source: GNOME Apps Nightly Flatpak Repo
- Homeserver: catgirl.cloud
See the full stack trace below:
Core was generated by `fractal'.
Program terminated with signal SIGFPE, Arithmetic exception.
#0 0x00007f49a47b7c59 in gtk_list_view_get_position_from_allocation (base=0x55f7f48067f0, x=<optimized out>, y=120, pos=0x7ffc72d06b9c, area=0x7ffc72d06bb0) at ../gtk/gtklistview.c:329
329 tile_pos = (y - tile->area.y) / row_height;
[Current thread is 1 (Thread 0x7f49a2175f00 (LWP 2))]
warning: Missing auto-load script at offset 0 in section .debug_gdb_scripts
of file /app/bin/fractal.
Use `info auto-load python-scripts [REGEXP]' to list them.
(gdb) bt full
#0 0x00007f49a47b7c59 in gtk_list_view_get_position_from_allocation (base=0x55f7f48067f0 [GtkListView], x=<optimized out>, y=120, pos=0x7ffc72d06b9c, area=0x7ffc72d06bb0) at ../gtk/gtklistview.c:329
self = 0x55f7f48067f0 [GtkListView]
tile = 0x55f7f7669c00
row_height = 0
tile_pos = <optimized out>
#1 0x00007f49a47aae81 in gtk_list_base_get_position_from_allocation (area=0x7ffc72d06bb0, pos=0x7ffc72d06b9c, along=120, across=235, self=0x55f7f48067f0 [GtkListView]) at ../gtk/gtklistbase.c:140
priv = <optimized out>
area = {x = 0, y = 120, width = 470, height = 654}
cell_area = {x = 1926261712, y = 32764, width = -1524266035, height = 32585}
along = 120
across = 235
total_size = 775
align_across = <optimized out>
align_along = <optimized out>
side_across = <optimized out>
side_along = <optimized out>
pos = 0
__func__ = "gtk_list_base_adjustment_value_changed_cb"
#2 gtk_list_base_adjustment_value_changed_cb (adjustment=0x55f7f4802300 [GtkAdjustment], self=0x55f7f48067f0 [GtkListView]) at ../gtk/gtklistbase.c:208
priv = <optimized out>
area = {x = 0, y = 120, width = 470, height = 654}
cell_area = {x = 1926261712, y = 32764, width = -1524266035, height = 32585}
along = 120
across = 235
total_size = 775
align_across = <optimized out>
align_along = <optimized out>
side_across = <optimized out>
side_along = <optimized out>
pos = 0
__func__ = "gtk_list_base_adjustment_value_changed_cb"
#6 0x00007f49a524b873 in <emit signal ??? on instance 0x55f7f4802300 [GtkAdjustment]> (instance=instance@entry=0x55f7f4802300, signal_id=<optimized out>, detail=detail@entry=0)
at ../gobject/gsignal.c:3612
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7ffc72d07010, reg_save_area = 0x7ffc72d06f50}}
#3 0x00007f49a5230442 in g_closure_invoke
(closure=0x55f7f48079e0, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7ffc72d06db0, invocation_hint=invocation_hint@entry=0x7ffc72d06d30)
at ../gobject/gclosure.c:832
marshal = 0x7f49a5232860 <g_cclosure_marshal_VOID__VOID>
marshal_data = 0x0
in_marshal = 0
real_closure = 0x55f7f48079c0
__func__ = "g_closure_invoke"
#4 0x00007f49a52446f8 in signal_emit_unlocked_R
(node=node@entry=0x55f7f264abe0, detail=detail@entry=0, instance=instance@entry=0x55f7f4802300, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffc72d06db0) at ../gobject/gsignal.c:3802
tmp = <optimized out>
handler = 0x55f7f4807710
accumulator = 0x0
--Type <RET> for more, q to quit, c to continue without paging--c
emission = {next = 0x7ffc72d07140, instance = 0x55f7f4802300, ihint = {signal_id = 170, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x4 [void]}
hlist = <optimized out>
handler_list = 0x55f7f4805870
return_accu = 0x0
accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
signal_id = 170
max_sequential_handler_number = 79771
return_value_altered = <optimized out>
#5 0x00007f49a524b6a5 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffc72d06f30) at ../gobject/gsignal.c:3555
instance_and_params = 0x7ffc72d06db0
signal_return_type = <optimized out>
param_values = 0x7ffc72d06dc8
node = <optimized out>
i = <optimized out>
n_params = <optimized out>
__func__ = "g_signal_emit_valist"
#7 0x00007f49a46dffc6 in emit_value_changed (adjustment=0x55f7f4802300 [GtkAdjustment]) at ../gtk/gtkadjustment.c:321
priv = <optimized out>
t = <optimized out>
priv = 0x55f7f48022a0
now = <optimized out>
#8 adjustment_set_value (value=<optimized out>, adjustment=0x55f7f4802300 [GtkAdjustment]) at ../gtk/gtkadjustment.c:425
priv = <optimized out>
t = <optimized out>
priv = 0x55f7f48022a0
now = <optimized out>
#9 gtk_adjustment_on_frame_clock_update (clock=<optimized out>, adjustment=0x55f7f4802300 [GtkAdjustment]) at ../gtk/gtkadjustment.c:484
t = <optimized out>
priv = 0x55f7f48022a0
now = <optimized out>
#13 0x00007f49a524b873 in <emit signal ??? on instance 0x55f7f28052f0 [GdkFrameClockIdle]> (instance=instance@entry=0x55f7f28052f0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3612
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7ffc72d07430, reg_save_area = 0x7ffc72d07370}}
#10 0x00007f49a5230442 in g_closure_invoke (closure=0x55f7f56b5020, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7ffc72d071d0, invocation_hint=invocation_hint@entry=0x7ffc72d07150) at ../gobject/gclosure.c:832
marshal = 0x7f49a5232860 <g_cclosure_marshal_VOID__VOID>
marshal_data = 0x0
in_marshal = 0
real_closure = 0x55f7f56b5000
__func__ = "g_closure_invoke"
#11 0x00007f49a52446f8 in signal_emit_unlocked_R (node=node@entry=0x55f7f320fa40, detail=detail@entry=0, instance=instance@entry=0x55f7f28052f0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffc72d071d0) at ../gobject/gsignal.c:3802
tmp = <optimized out>
handler = 0x55f7f4988690
accumulator = 0x0
emission = {next = 0x0, instance = 0x55f7f28052f0, ihint = {signal_id = 229, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x4 [void]}
hlist = <optimized out>
handler_list = 0x55f7f7a40da0
return_accu = 0x0
accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
signal_id = 229
max_sequential_handler_number = 79771
return_value_altered = <optimized out>
#12 0x00007f49a524b6a5 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffc72d07350) at ../gobject/gsignal.c:3555
instance_and_params = 0x7ffc72d071d0
signal_return_type = <optimized out>
param_values = 0x7ffc72d071e8
node = <optimized out>
i = <optimized out>
n_params = <optimized out>
__func__ = "g_signal_emit_valist"
#14 0x00007f49a4a428fd in _gdk_frame_clock_emit_update (frame_clock=frame_clock@entry=0x55f7f28052f0 [GdkFrameClockIdle]) at ../gdk/gdkframeclock.c:684
before = 2917128535791
#15 0x00007f49a4a435c2 in gdk_frame_clock_paint_idle (data=data@entry=0x55f7f28052f0) at ../gdk/gdkframeclockidle.c:557
clock = 0x55f7f28052f0 [GdkFrameClockIdle]
clock_idle = 0x55f7f28052f0 [GdkFrameClockIdle]
priv = 0x55f7f28051e0
skip_to_resume_events = 0
timings = <optimized out>
before = 2917128532806
__func__ = "gdk_frame_clock_paint_idle"
#16 0x00007f49a4a43754 in gdk_frame_clock_flush_idle (data=0x55f7f28052f0, data@entry=<error reading variable: value has been optimized out>) at ../gdk/gdkframeclockidle.c:378
clock = 0x55f7f28052f0 [GdkFrameClockIdle]
clock_idle = 0x55f7f28052f0 [GdkFrameClockIdle]
priv = 0x55f7f28051e0
#17 0x00007f49a512ba9f in g_timeout_dispatch (source=0x55f7f79cf1c0, callback=<optimized out>, user_data=<optimized out>) at ../glib/gmain.c:5054
timeout_source = 0x55f7f79cf1c0
again = <optimized out>
#18 0x00007f49a512ad99 in g_main_dispatch (context=<optimized out>) at ../glib/gmain.c:3460
dispatch = 0x7f49a512ba80 <g_timeout_dispatch>
prev_source = 0x0
begin_time_nsec = 2917127005797
was_in_call = 0
user_data = 0x55f7f28052f0
callback = 0x7f49a4a436f0 <gdk_frame_clock_flush_idle>
cb_funcs = 0x7f49a52162e0 <g_source_callback_funcs>
cb_data = 0x55f7f8111790
need_destroy = <optimized out>
source = 0x55f7f79cf1c0
current = 0x55f7f22ceec0
i = 0
__func__ = "g_main_dispatch"
#19 g_main_context_dispatch (context=<optimized out>) at ../glib/gmain.c:4200
#20 0x00007f49a512b2f8 in g_main_context_iterate (context=context@entry=0x55f7f22bd930, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4276
max_priority = 1
timeout = 0
some_ready = 1
nfds = 2
allocated_nfds = <optimized out>
fds = <optimized out>
begin_time_nsec = 2917127000327
#21 0x00007f49a512b393 in g_main_context_iteration (context=context@entry=0x55f7f22bd930, may_block=may_block@entry=1) at ../glib/gmain.c:4343
retval = <optimized out>
#22 0x00007f49a43dc68d in g_application_run (application=0x55f7f2506e60 [Application], argc=<optimized out>, argv=<optimized out>) at ../gio/gapplication.c:2573
arguments = 0x55f7f24d8490
status = 0
context = 0x55f7f22bd930
acquired_context = <optimized out>
__func__ = "g_application_run"
#23 0x000055f7f00e55e5 in gio::application::{impl#0}::run_with_args<fractal::application::Application, alloc::string::String> (args=..., self=<optimized out>) at _flatpak_build/cargo-home/registry/src/github.com-1ecc6299db9ec823/gio-0.17.3/src/application.rs:37
argc = 1
argv = alloc::vec::Vec<&str, alloc::alloc::Global> {buf: alloc::raw_vec::RawVec<&str, alloc::alloc::Global> {ptr: core::ptr::unique::Unique<&str> {pointer: core::ptr::non_null::NonNull<&str> {pointer: 0x55f7f24db200}, _marker: core::marker::PhantomData<&str>}, cap: 1, alloc: alloc::alloc::Global}, len: 1}
#24 gio::application::{impl#0}::run<fractal::application::Application> (self=<optimized out>) at _flatpak_build/cargo-home/registry/src/github.com-1ecc6299db9ec823/gio-0.17.3/src/application.rs:30
#25 fractal::application::Application::run (self=<optimized out>) at src/application.rs:207
#26 0x000055f7f053f04f in fractal::main () at src/main.rs:61
app = fractal::application::Application {inner: glib::object::TypedObjectRef<fractal::application::imp::Application, libadwaita::auto::application::Application> {inner: glib::object::ObjectRef {inner: core::ptr::non_null::NonNull<gobject_sys::GObject> {pointer: 0x78}}, imp: core::marker::PhantomData<fractal::application::imp::Application>, parent: core::marker::PhantomData<libadwaita::auto::application::Application>}, phantom: core::marker::PhantomData<()>}
res = gio::auto::resource::Resource {inner: glib::shared::Shared<gio_sys::GResource, gio::auto::resource::Resource> {inner: core::ptr::non_null::NonNull<gio_sys::GResource> {pointer: <optimized out>}, mm: core::marker::PhantomData<*const gio::auto::resource::Resource>}}