From eb589e2bfee8bcde410e1bae4ec3da6b105fbcf9 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Sat, 26 Jan 2019 11:38:20 +0000 Subject: [PATCH] tests: Ensure GCancellable is cancelled before operation is started MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the writev() tests, the handling of cancellation is tested. However, the GCancellable was cancelled after the writev_async() call was started. Depending on the implementation of the writev() vfunc, the operation could be done in a thread or in callbacks on the current thread’s main loop. If done in a separate thread, there’s a chance that enough of the write could happen before cancellation reaches that thread that the overall operation returns success with a short write. That would cause the test to fail, sometimes. Avoid that by cancelling the GCancellable before starting the writev() operation. Signed-off-by: Philip Withnall Reviewed-by: nobody --- gio/tests/file.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gio/tests/file.c b/gio/tests/file.c index affa0bce6..658d17549 100644 --- a/gio/tests/file.c +++ b/gio/tests/file.c @@ -1534,11 +1534,10 @@ test_writev_async_all_cancellation (void) ostream = g_io_stream_get_output_stream (G_IO_STREAM (iostream)); cancellable = g_cancellable_new (); + g_cancellable_cancel (cancellable); g_output_stream_writev_all_async (ostream, vectors, G_N_ELEMENTS (vectors), 0, cancellable, test_writev_all_cb, &data); - g_cancellable_cancel (cancellable); - while (!data.done) g_main_context_iteration (NULL, TRUE);