[44.rc] Crash when running a Steam game - SteamWorld Heist (regression from 43.3)
Affected version
Provide at least the following information:
- Your OS and version: Fedora 38 Beta
- Affected Mutter version:
mutter-44~rc-4.fc38.x86_64
- Does this issue appear in XOrg and/or Wayland: Wayland, Xorg not tested
Bug summary
When I try to run a Steam game SteamWorld Heist, it crashes mutter and its window looks invisible. It's a native Linux game, and worked perfectly fine on Fedora 37 with mutter-43.3
. After upgrading to Fedora 38 Beta, I can no longer run it.
So far, I've seen the following:
- The first attempt to start the game usually shows a game output for a second, and then mutter crashes. The game is still running, I can hear its sound, but it can't be switched into. In Overview, I can only see a transparent rectangle instead of the game window, and clicking on it doesn't switch to it, it returns back to the last window. 1b. Once, I've seen an alternative occurrence where the game window showed up as "full screen", but it was shifted 10-100 pixels to the left and bottom. So at the top and right, I see my desktop+apps. After switching to some different app, I could no longer switch back to the game (switching back and forth worked just fine with mutter 43.3).
- Any subsequent attempt to run the game results in a transparent rectangle instead of the game window in Overview, can't be switched into, but no further crash of anything.
I haven't tested yet whether this affects more games.
My Steam is installed from Flathub.
Steps to reproduce
- Install Steam from Flathub
- Install SteamWorld Heist (a paid game)
- Try to start it
- mutter crashes
Relevant logs, screenshots, screencasts etc.
Here's ABRT Analytics report:
https://retrace.fedoraproject.org/faf/reports/628520/
ABRT tells me the crash has low informational value and can't be reported. I managed to get this traceback through gdb
:
#0 0x00007ff7a2ffd646 in gtk_widget_get_request_mode () from /lib64/libgtk-4.so.1
No symbol table info available.
#1 0x00007ff7a307cd3f in toplevel_compute_size () from /lib64/libgtk-4.so.1
No symbol table info available.
#2 0x00007ff7a2db43c2 in g_closure_invoke (closure=0x55e916cd6e70, return_value=0x0, n_param_values=2, param_values=0x7ffd5eb73260, invocation_hint=0x7ffd5eb731e0) at ../gobject/gclosure.c:832
marshal = 0x7ff7a2db6f90 <g_cclosure_marshal_VOID__POINTER>
marshal_data = 0x0
in_marshal = 0
real_closure = 0x55e916cd6e50
__func__ = "g_closure_invoke"
#3 0x00007ff7a2de34f8 in signal_emit_unlocked_R.isra.0 (node=node@entry=0x55e916ef6f30, detail=detail@entry=0, instance=instance@entry=0x55e9191fac90, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd5eb73260) at ../gobject/gsignal.c:3802
tmp = <optimized out>
handler = 0x55e91916d530
accumulator = 0x0
emission = {next = 0x0, instance = 0x55e9191fac90, ihint = {signal_id = 110, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 4}
class_closure = <optimized out>
hlist = <optimized out>
handler_list = 0x55e91916d530
return_accu = 0x0
accu = {g_type = 0, 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 = 110
max_sequential_handler_number = 584
return_value_altered = <optimized out>
EMIT_RESTART = <optimized out>
#4 0x00007ff7a2dd2bea in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd5eb73420) at ../gobject/gsignal.c:3555
instance_and_params = <optimized out>
signal_return_type = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
n_params = <optimized out>
__func__ = "g_signal_emit_valist"
#5 0x00007ff7a2dd2e13 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3612
var_args = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7ffd5eb73500, reg_save_area = 0x7ffd5eb73440}}
#6 0x00007ff7a31f4f2b in compute_toplevel_size.lto_priv () from /lib64/libgtk-4.so.1
No symbol table info available.
#7 0x00007ff7a31f5443 in compute_size_idle () from /lib64/libgtk-4.so.1
No symbol table info available.
#8 0x00007ff7a2caf9ed in g_idle_dispatch (source=0x55e91904f8f0, callback=0x7ff7a31f5400 <compute_size_idle>, user_data=0x55e9191fac90) at ../glib/gmain.c:6163
idle_source = 0x55e91904f8f0
again = <optimized out>
#9 0x00007ff7a2cb3788 in g_main_dispatch (context=0x55e916cdac90) at ../glib/gmain.c:3460
dispatch = 0x7ff7a2caf9c0 <g_idle_dispatch>
prev_source = 0x0
begin_time_nsec = 79566991517
was_in_call = 0
user_data = 0x55e9191fac90
callback = 0x7ff7a31f5400 <compute_size_idle>
cb_funcs = 0x7ff7a2d9e380 <g_source_callback_funcs>
cb_data = 0x55e916dadaf0
need_destroy = <optimized out>
source = 0x55e91904f8f0
current = 0x55e916dac6b0
i = 0
current = <optimized out>
i = <optimized out>
__func__ = <optimized out>
source = <optimized out>
_g_boolean_var_165 = <optimized out>
was_in_call = <optimized out>
user_data = <optimized out>
callback = <optimized out>
cb_funcs = <optimized out>
cb_data = <optimized out>
need_destroy = <optimized out>
dispatch = <optimized out>
prev_source = <optimized out>
begin_time_nsec = <optimized out>
_g_boolean_var_166 = <optimized out>
#10 g_main_context_dispatch (context=0x55e916cdac90) at ../glib/gmain.c:4200
No locals.
#11 0x00007ff7a2d11dd8 in g_main_context_iterate.isra.0 (context=0x55e916cdac90, block=1, dispatch=1, self=<optimized out>) at ../glib/gmain.c:4276
max_priority = -110
timeout = 0
some_ready = 1
nfds = 0
allocated_nfds = <optimized out>
fds = <optimized out>
begin_time_nsec = 79566988467
#12 0x00007ff7a2cb2e8f in g_main_loop_run (loop=0x55e916e25d20) at ../glib/gmain.c:4479
self = <optimized out>
__func__ = "g_main_loop_run"
#13 0x000055e915927d51 in main (argc=<optimized out>, argv=<optimized out>) at ../src/frames/main.c:66
window_tracker = 0x55e916dac6f0
display = <optimized out>
loop = 0x55e916e25d20
xdisplay = <optimized out>
Here's a traceback with thread apply all bt full
:
gdb-threads-full.txt