Bug#1108935: mutter: intermittent test failure in surface-scale-tests: assertion failed (cursor_scale == scale (+/- FLT_EPSILON)): (0 == 2)

Simon McVittie smcv at debian.org
Tue Jul 8 10:41:03 BST 2025


Source: mutter
Version: 48.2-1
Severity: important
Tags: ftbfs unreproducible help
Control: found -1 48.4-1
User: debian-ci at lists.debian.org
Usertags: flaky

Although the majority of mutter's build-time test and autopkgtest 
failures appear to have been resolved during the 48.x series, looking 
through build and autopkgtest logs there is one failure mode that has 
not been accounted for.

In one autopkgtest on armel, 
https://ci.debian.net/packages/m/mutter/testing/armel/61424275/ we see 
this failure:

> 488s # Running test: mutter-16/surface-scale-tests.test
> 492s # FAIL: mutter-16/surface-scale-tests.test (Child process exited with code 250)
> 492s not ok - mutter-16/surface-scale-tests.test
...
> 670s # SUMMARY: total=34; passed=33; skipped=0; failed=1; user=237.9s; system=51.7s; maxrss=2491188
> 670s # FAIL: mutter-16/surface-scale-tests.test (Child process exited with code 250)
> 670s autopkgtest [15:17:33]: test installed-tests: -----------------------]
> 670s installed-tests      FAIL non-zero exit status 2

For further details of that failure we have to look in the 
$AUTOPKGTEST_ARTIFACTS (artifacts.tar.gz on ci.debian.net) and read 
artifacts/mutter-16_surface-scale-tests.test.txt, quoted in full here:

> Setup HOME as /tmp/mutter-testroot-q4d27a1a/home
> Setup TMPDIR as /tmp/mutter-testroot-q4d27a1a/tmpdir
> Setup XDG_CACHE_HOME as /tmp/mutter-testroot-q4d27a1a/xdg_cache_home
> Setup XDG_CONFIG_HOME as /tmp/mutter-testroot-q4d27a1a/xdg_config_home
> Setup XDG_DATA_HOME as /tmp/mutter-testroot-q4d27a1a/xdg_data_home
> Setup XDG_RUNTIME_DIR as /tmp/mutter-testroot-q4d27a1a/xdg_runtime_dir
> Starting D-Bus daemons (session & system)...
> Binding /tmp/mutter-testroot-q4d27a1a/xdg_runtime_dir/pipewire-0 for socket activation
> Binding /tmp/mutter-testroot-q4d27a1a/xdg_runtime_dir/pipewire-0-manager for socket activation
> Launching required services...
> Starting mocked services...
> Running test case...
> Process ['/usr/libexec/installed-tests/mutter-16/mutter-surface-scale-tests'] started with pid 6405
> ERROR:dbus.proxies:Introspect error on :1.1:/org/freedesktop/login1/session/dummy: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownObject: Unknown object '/org/freedesktop/login1/session/dummy'.
> TAP version 14
> # random seed: R02S7d29f311ad333ae5918550f468fbdcc7
> # GLib-GIO-DEBUG: _g_io_module_get_default: Found default implementation memory (GMemorySettingsBackend) for ‘gsettings-backend’
> # GLib-DEBUG: setenv()/putenv() are not thread-safe and should not be used after threads are created
> # libmutter-MESSAGE: Running Mutter Test (using mutter 48.2) as a Wayland display server
> # libmutter-MESSAGE: Created surfaceless renderer without GPU
> # GLib-GIO-DEBUG: _g_io_module_get_default: Found default implementation local (GLocalVfs) for ‘gio-vfs’
> # libmutter-DEBUG: WL: Unable to initialize wl_eglstream_controller.
> # libmutter-MESSAGE: Using Wayland display name 'mutter-test-display'
> # libmutter-INFO: Acquired name org.gnome.Mutter.InputMapping
> # libmutter-DEBUG: Acquired name org.freedesktop.a11y.Manager
> # libmutter-INFO: Acquired name org.gnome.Mutter.ServiceChannel
> 1..1
> # Start of wayland tests
> # Start of surface tests
> # mutter-surface-scale-tests-test-DEBUG: Testing with scale 2.0, then launching client
> ** (process:6446): DEBUG: 15:14:34.958: Waiting for scales to check
> ** (process:6446): DEBUG: 15:14:35.261: Checking scale 2.000000
> **
> ERROR:../src/tests/wayland-test-clients/surface-scale-client.c:41:check_scales: assertion failed (cursor_scale == scale (+/- FLT_EPSILON)): (0 == 2)
> Bail out! ERROR:../src/tests/wayland-test-clients/surface-scale-client.c:41:check_scales: assertion failed (cursor_scale == scale (+/- FLT_EPSILON)): (0 == 2)
> **
> mutter-surface-scale-tests-test:ERROR:../src/tests/meta-wayland-test-utils.c:59:wayland_test_client_finished: 'g_subprocess_get_successful (wayland_test_client->subprocess)' should be TRUE
> not ok /wayland/surface/surface-scales - mutter-surface-scale-tests-test:ERROR:../src/tests/meta-wayland-test-utils.c:59:wayland_test_client_finished: 'g_subprocess_get_successful (wayland_test_client->subprocess)' should be TRUE
> Bail out!
> Closing PipeWire socket...
> Terminating services...

An equivalent failure was seen for 48.4-1 in experimental on 
reproducible-builds.org, although only for the second of the two builds 
that r-b does (in the first build, all tests passed):

> 146/158 mutter:core+mutter/backends/native / surface-scale-tests                                  RUNNING       
> >>> MALLOC_PERTURB_=83 G_TEST_SRCDIR=/build/reproducible-path/mutter-48.4/src/tests UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 XDG_CONFIG_HOME=/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/.config ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 MUTTER_REF_TEST_RESULT_DIR=/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/meson-logs/tests/ref-tests GSETTINGS_SCHEMA_DIR=/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/src/tests:/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/data MUTTER_GDCTL_TEST_RESULT_DIR=/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/meson-logs/tests/gdctl G_TEST_BUILDDIR=/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/src/tests LD_LIBRARY_PATH=/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/cogl/cogl:/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/clutter/clutter:/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/src:/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/src/compositor/plugins:/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/mtk/mtk:/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/src/tests MUTTER_TEST_PLUGIN_PATH=/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/src/compositor/plugins/libdefault.so MESON_TEST_ITERATION=1 MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 /build/reproducible-path/mutter-48.4/src/tests/meta-dbus-runner.py -- /build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/src/tests/mutter-surface-scale-tests
> ――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――
> Setup HOME as /tmp/mutter-testroot-d5xglgov/home
> Setup TMPDIR as /tmp/mutter-testroot-d5xglgov/tmpdir
> Setup XDG_CACHE_HOME as /tmp/mutter-testroot-d5xglgov/xdg_cache_home
> Setup XDG_CONFIG_HOME as /tmp/mutter-testroot-d5xglgov/xdg_config_home
> Setup XDG_DATA_HOME as /tmp/mutter-testroot-d5xglgov/xdg_data_home
> Setup XDG_RUNTIME_DIR as /tmp/mutter-testroot-d5xglgov/xdg_runtime_dir
> Starting D-Bus daemons (session & system)...
> Binding /tmp/mutter-testroot-d5xglgov/xdg_runtime_dir/pipewire-0 for socket activation
> Binding /tmp/mutter-testroot-d5xglgov/xdg_runtime_dir/pipewire-0-manager for socket activation
> Launching required services...
> Starting mocked services...
> Running test case...
> Process ['/build/reproducible-path/mutter-48.4/obj-x86_64-linux-gnu/src/tests/mutter-surface-scale-tests'] started with pid 27239
> TAP version 14
> # random seed: R02S695bc3faecc9b013f93bc09beadcbecc
> # GLib-GIO-DEBUG: _g_io_module_get_default: Found default implementation memory (GMemorySettingsBackend) for ‘gsettings-backend’
> # GLib-DEBUG: setenv()/putenv() are not thread-safe and should not be used after threads are created
> # libmutter-MESSAGE: Running Mutter Test (using mutter 48.4) as a Wayland display server
> # libmutter-MESSAGE: Created surfaceless renderer without GPU
> # GLib-GIO-DEBUG: _g_io_module_get_default: Found default implementation local (GLocalVfs) for ‘gio-vfs’
> # libmutter-DEBUG: WL: loaded libnvidia-egl-wayland.so.1:wl_eglstream_controller.
> # libmutter-MESSAGE: Using Wayland display name 'mutter-test-display'
> # libmutter-INFO: Acquired name org.gnome.Mutter.InputMapping
> # libmutter-DEBUG: Acquired name org.freedesktop.a11y.Manager
> # libmutter-INFO: Acquired name org.gnome.Mutter.ServiceChannel
> 1..1
> # Start of wayland tests
> # Start of surface tests
> # mutter-surface-scale-tests-test-DEBUG: Testing with scale 2.0, then launching client
> ** (process:27351): DEBUG: 21:05:25.390: Waiting for scales to check
> ** (process:27351): DEBUG: 21:05:26.061: Checking scale 2.000000
> **
> ERROR:../src/tests/wayland-test-clients/surface-scale-client.c:41:check_scales: assertion failed (cursor_scale == scale (+/- FLT_EPSILON)): (0 == 2)
> Bail out! ERROR:../src/tests/wayland-test-clients/surface-scale-client.c:41:check_scales: assertion failed (cursor_scale == scale (+/- FLT_EPSILON)): (0 == 2)
> **
> mutter-surface-scale-tests-test:ERROR:../src/tests/meta-wayland-test-utils.c:59:wayland_test_client_finished: 'g_subprocess_get_successful (wayland_test_client->subprocess)' should be TRUE
> not ok /wayland/surface/surface-scales - mutter-surface-scale-tests-test:ERROR:../src/tests/meta-wayland-test-utils.c:59:wayland_test_client_finished: 'g_subprocess_get_successful (wayland_test_client->subprocess)' should be TRUE
> Bail out!
> Closing PipeWire socket...
> Terminating services...
> ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
> 146/158 mutter:core+mutter/backends/native / surface-scale-tests                                  FAIL              7.52s   (exit status 250 or signal 122 SIGinvalid)

This has not been seen on official buildds, and has not been seen on 
ci.debian.net in the dozens of autopkgtest runs that were done since 
May, so my suspicion is that it's a race condition or other 
timing-related issue that rarely happens. Perhaps there is a race 
between the mutter compositor setting the cursor scale to its correct 
nonzero value, and the client retrieving it?

Assistance in reproducing or debugging this test failure would be 
appreciated.

    smcv



More information about the pkg-gnome-maintainers mailing list