diff --git a/tests/refcount/closures.c b/tests/refcount/closures.c index 25b0a2779..188406786 100644 --- a/tests/refcount/closures.c +++ b/tests/refcount/closures.c @@ -259,7 +259,19 @@ main (int argc, thread1 = g_thread_create (thread1_main, closure, TRUE, NULL); thread2 = g_thread_create (thread2_main, closure, TRUE, NULL); + /* The 16-bit compare-and-swap operations currently used for closure + * refcounts are really slow on some ARM CPUs, notably Cortex-A57. + * Reduce the number of iterations so that the test completes in a + * finite time, but don't reduce it so much that the main thread + * starves the other threads and causes a test failure. + * + * https://gitlab.gnome.org/GNOME/glib/issues/1316 + * aka https://bugs.debian.org/880883 */ +#if defined(__aarch64__) || defined(__arm__) + for (i = 0; i < 100000; i++) +#else for (i = 0; i < 1000000; i++) +#endif { static guint count = 0; test_emissions (object); diff --git a/tests/refcount/meson.build b/tests/refcount/meson.build index 68c23cc41..22b9655d7 100644 --- a/tests/refcount/meson.build +++ b/tests/refcount/meson.build @@ -54,6 +54,13 @@ foreach test_name, extra_args : refcount_tests suite = ['refcount'] + extra_args.get('suite', []) timeout = suite.contains('slow') ? test_timeout_slow : test_timeout + + # https://gitlab.gnome.org/GNOME/glib/issues/1316 + # aka https://bugs.debian.org/880883 + if test_name == 'closures' and ['arm', 'aarch64'].contains(host_cpu_family) + timeout = timeout * 10 + endif + # FIXME? TESTS_ENVIRONMENT = LIBCHARSET_ALIAS_DIR=$(top_builddir)/glib/libcharset test(test_name, exe, env : test_env, timeout : timeout, suite : suite) endforeach