From a40a33dfe06eb1cd2e9b8cb9e7be9d73ab39b0e7 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Tue, 1 Oct 2024 13:32:29 +0100 Subject: [PATCH] tests: Rework a mainloop test to use an explicit termination condition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit And to not assume that every main context iteration will provide progress on the sources that the test is interested in. It’s possible that other sources may be attached to the `GMainContext` which get dispatched instead of the pipe sources on an iteration. I don’t know if this will fix #3483, but it will certainly make this test a little tidier. It doesn’t affect test run time. Signed-off-by: Philip Withnall Fixes: #3483 --- glib/tests/mainloop.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/glib/tests/mainloop.c b/glib/tests/mainloop.c index 152e74b87..6748a6436 100644 --- a/glib/tests/mainloop.c +++ b/glib/tests/mainloop.c @@ -1328,14 +1328,17 @@ test_unix_fd (void) /* Assuming the kernel isn't internally 'laggy' then there will always * be either data to read or room in which to write. That will keep * the loop running until all data has been read and written. + * + * We can’t rely on the data being available in exactly one `GMainContext` + * iteration, though, as it may be potentially deferred in favour of higher + * priority sources. */ - while (TRUE) + while (to_write > 0 || to_read > 0) { gssize to_write_was = to_write; gssize to_read_was = to_read; - if (!g_main_context_iteration (NULL, FALSE)) - break; + g_main_context_iteration (NULL, TRUE); /* Since the sources are at different priority, only one of them * should possibly have run.