• Bug#1108935: mutter: intermittent test failure in surface-scale-tests:

    From Simon McVittie@21:1/5 to All on Tue Jul 8 11:50:01 2025
    Source: mutter
    Version: 48.2-1
    Severity: important
    Tags: ftbfs unreproducible help
    Control: found -1 48.4-1
    User: [email protected]
    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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)