mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 23:16:14 +01:00
tests: Continue closure-refcount test until all three threads are seen
Previously, the test assumed that thread1 and thread2 would be scheduled enough to set seen_thread{1,2} by the fact that the test runs for a high number of iterations. On some platforms/schedulers, that’s not true, which causes the test to spuriously fail. Fix that by forcing the test to continue iterating until both threads are seen. If this takes too long, the Meson test runner timeout will be hit and the test will be terminated. Signed-off-by: Philip Withnall <withnall@endlessm.com>
This commit is contained in:
parent
86f4a02b65
commit
1ae54da69b
@ -258,7 +258,7 @@ test_closure_refcount (void)
|
|||||||
TestClosureRefcountData test_data = { 0, };
|
TestClosureRefcountData test_data = { 0, };
|
||||||
GClosure *closure;
|
GClosure *closure;
|
||||||
GTest *object;
|
GTest *object;
|
||||||
guint i;
|
guint i, n_iterations;
|
||||||
|
|
||||||
object = g_object_new (G_TYPE_TEST, NULL);
|
object = g_object_new (G_TYPE_TEST, NULL);
|
||||||
closure = g_cclosure_new (G_CALLBACK (test_signal_handler), &test_data, destroy_data);
|
closure = g_cclosure_new (G_CALLBACK (test_signal_handler), &test_data, destroy_data);
|
||||||
@ -281,10 +281,21 @@ test_closure_refcount (void)
|
|||||||
* https://gitlab.gnome.org/GNOME/glib/issues/1316
|
* https://gitlab.gnome.org/GNOME/glib/issues/1316
|
||||||
* aka https://bugs.debian.org/880883 */
|
* aka https://bugs.debian.org/880883 */
|
||||||
#if defined(__aarch64__) || defined(__arm__)
|
#if defined(__aarch64__) || defined(__arm__)
|
||||||
for (i = 0; i < 100000; i++)
|
n_iterations = 100000;
|
||||||
#else
|
#else
|
||||||
for (i = 0; i < 1000000; i++)
|
n_iterations = 1000000;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Run the test for a reasonably high number of iterations, and ensure we
|
||||||
|
* don’t terminate until at least 10000 iterations have completed in both
|
||||||
|
* thread1 and thread2. Even though @n_iterations is high, we can’t guarantee
|
||||||
|
* that the scheduler allocates time fairly (or at all!) to thread1 or
|
||||||
|
* thread2. */
|
||||||
|
for (i = 0;
|
||||||
|
i < n_iterations ||
|
||||||
|
!g_atomic_int_get (&test_data.seen_thread1) ||
|
||||||
|
!g_atomic_int_get (&test_data.seen_thread2);
|
||||||
|
i++)
|
||||||
{
|
{
|
||||||
test_emissions (object);
|
test_emissions (object);
|
||||||
if (i % 10000 == 0)
|
if (i % 10000 == 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user