tests: Ensure GCancellable is cancelled before operation is started

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 <withnall@endlessm.com>
Reviewed-by: nobody
This commit is contained in:
Philip Withnall 2019-01-26 11:38:20 +00:00
parent 50d628d859
commit eb589e2bfe

View File

@ -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);