From b9df7a4e707aaa6eba8494bffdd4c9917d9ac261 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Fri, 23 Apr 2021 09:56:49 +0200 Subject: [PATCH] device: Attach sources to correct main context We were attaching the sources to the default main context. Instead, we should be attaching them to the current tasks main context (or, failing that, the current thread local main context). --- libfprint/fp-device.c | 3 ++- libfprint/fpi-device.c | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/libfprint/fp-device.c b/libfprint/fp-device.c index a0f21722..bf405855 100644 --- a/libfprint/fp-device.c +++ b/libfprint/fp-device.c @@ -113,7 +113,8 @@ fp_device_cancelled_cb (GCancellable *cancellable, FpDevice *self) fp_device_cancel_in_idle_cb, self, NULL); - g_source_attach (priv->current_idle_cancel_source, NULL); + g_source_attach (priv->current_idle_cancel_source, + g_task_get_context (priv->current_task)); g_source_unref (priv->current_idle_cancel_source); } diff --git a/libfprint/fpi-device.c b/libfprint/fpi-device.c index 2cd06371..78a7939a 100644 --- a/libfprint/fpi-device.c +++ b/libfprint/fpi-device.c @@ -334,12 +334,18 @@ fpi_device_add_timeout (FpDevice *device, { FpDevicePrivate *priv = fp_device_get_instance_private (device); FpDeviceTimeoutSource *source; + GMainContext *context; source = (FpDeviceTimeoutSource *) g_source_new (&timeout_funcs, sizeof (FpDeviceTimeoutSource)); source->device = device; - g_source_attach (&source->source, NULL); + if (priv->current_task) + context = g_task_get_context (priv->current_task); + else + context = g_main_context_get_thread_default (); + + g_source_attach (&source->source, context); g_source_set_callback (&source->source, (GSourceFunc) func, user_data, destroy_notify); g_source_set_ready_time (&source->source, g_source_get_time (&source->source) + interval * (guint64) 1000); @@ -930,7 +936,8 @@ fpi_device_return_task_in_idle (FpDevice *device, data, (GDestroyNotify) fpi_device_task_return_data_free); - g_source_attach (priv->current_task_idle_return_source, NULL); + g_source_attach (priv->current_task_idle_return_source, + g_task_get_context (priv->current_task)); g_source_unref (priv->current_task_idle_return_source); }