From 8e185e12c971a2e5cfea2a88a365230c64193ad7 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Mon, 22 Nov 2021 13:22:25 +0000 Subject: [PATCH] tests: Fix a flaky wait in converter-stream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rather than waiting for a fixed period of time, poll in a loop until the condition the test is expecting is true. A better solution would be to use a `GSource` and wait until that’s dispatched. But doing so might affect the behaviour of the `GInputStream` under test, so busy-wait instead. Fixes this CI failure: https://gitlab.gnome.org/GNOME/glib/-/jobs/1630758 ``` (some socket debug output) Bail out! GLib-GIO:ERROR:../gio/tests/converter-stream.c:1037:test_converter_pollable: assertion failed (res == -1): (1 == -1) ``` I could not reproduce the failure remotely with a few hundred invocations of the test, so it might only present itself on BSD, which presumably has different socket timing behaviour from Linux. Signed-off-by: Philip Withnall --- gio/tests/converter-stream.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gio/tests/converter-stream.c b/gio/tests/converter-stream.c index 6befa274c..8c4731590 100644 --- a/gio/tests/converter-stream.c +++ b/gio/tests/converter-stream.c @@ -1022,10 +1022,10 @@ test_converter_pollable (void) } /* Wait a few ticks to check for the pipe to propagate the - * write. Finesses the race condition in the following test, - * where is_readable fails because the write hasn't propagated, - * but the read then succeeds because it has. */ - g_usleep (80L); + * write. We can’t wait on a GSource as that might affect the stream under + * test, so just poll. */ + while (!g_pollable_input_stream_is_readable (pollable_in)) + g_usleep (80L); is_readable = g_pollable_input_stream_is_readable (pollable_in); res = g_pollable_input_stream_read_nonblocking (pollable_in,