tests: Fix cancellation source handling in resolver manual test

If `async_cancel()` was invoked, it would remove the IO watch source,
which would cause the `g_source_remove()` call at the end of `main()` to
warn about an unknown source ID.

Fix that by handling the source as a pointer instead of a handle.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
This commit is contained in:
Philip Withnall 2023-04-25 18:38:40 +01:00
parent 2ac66413a4
commit 1c4384aec5

View File

@ -689,7 +689,7 @@ static gboolean
async_cancel (GIOChannel *source, GIOCondition cond, gpointer cancel) async_cancel (GIOChannel *source, GIOCondition cond, gpointer cancel)
{ {
g_cancellable_cancel (cancel); g_cancellable_cancel (cancel);
return FALSE; return G_SOURCE_REMOVE;
} }
#endif #endif
@ -734,7 +734,7 @@ main (int argc, char **argv)
GError *error = NULL; GError *error = NULL;
#ifdef G_OS_UNIX #ifdef G_OS_UNIX
GIOChannel *chan; GIOChannel *chan;
guint watch; GSource *watch_source = NULL;
#endif #endif
context = g_option_context_new ("lookups ..."); context = g_option_context_new ("lookups ...");
@ -768,7 +768,9 @@ main (int argc, char **argv)
exit (1); exit (1);
} }
chan = g_io_channel_unix_new (cancel_fds[0]); chan = g_io_channel_unix_new (cancel_fds[0]);
watch = g_io_add_watch (chan, G_IO_IN, async_cancel, cancellable); watch_source = g_io_create_watch (chan, G_IO_IN);
g_source_set_callback (watch_source, (GSourceFunc) async_cancel, cancellable, NULL);
g_source_attach (watch_source, NULL);
g_io_channel_unref (chan); g_io_channel_unref (chan);
#endif #endif
@ -792,7 +794,8 @@ main (int argc, char **argv)
g_main_loop_unref (loop); g_main_loop_unref (loop);
#ifdef G_OS_UNIX #ifdef G_OS_UNIX
g_source_remove (watch); g_source_destroy (watch_source);
g_clear_pointer (&watch_source, g_source_unref);
#endif #endif
g_object_unref (cancellable); g_object_unref (cancellable);
g_option_context_free (context); g_option_context_free (context);