From f9228c99aa3dc8747d814fe6ab39ed81ced04027 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Tue, 17 Sep 2013 23:13:00 +0200 Subject: [PATCH 1/2] PkTask: make thread-default-context aware We must install idle sources in the right main context, otherwise PkTask becomes impossible to use thread safely. --- lib/packagekit-glib2/pk-task.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/packagekit-glib2/pk-task.c b/lib/packagekit-glib2/pk-task.c index 4fc1587..aefb459 100644 --- a/lib/packagekit-glib2/pk-task.c +++ b/lib/packagekit-glib2/pk-task.c @@ -726,8 +726,8 @@ out: gboolean pk_task_user_accepted (PkTask *task, guint request) { - guint idle_id; PkTaskState *state; + GSource *idle_source; /* get the not-yet-completed request */ state = pk_task_find_by_request (task, request); @@ -736,8 +736,10 @@ pk_task_user_accepted (PkTask *task, guint request) return FALSE; } - idle_id = g_idle_add ((GSourceFunc) pk_task_user_accepted_idle_cb, state); - g_source_set_name_by_id (idle_id, "[PkTask] user-accept"); + idle_source = g_idle_source_new (); + g_source_set_callback (idle_source, (GSourceFunc) pk_task_user_accepted_idle_cb, state, NULL); + g_source_set_name (idle_source, "[PkTask] user-accept"); + g_source_attach (idle_source, g_main_context_get_thread_default ()); return TRUE; } @@ -776,8 +778,8 @@ out: gboolean pk_task_user_declined (PkTask *task, guint request) { - guint idle_id; PkTaskState *state; + GSource *idle_source; /* get the not-yet-completed request */ state = pk_task_find_by_request (task, request); @@ -786,8 +788,10 @@ pk_task_user_declined (PkTask *task, guint request) return FALSE; } - idle_id = g_idle_add ((GSourceFunc) pk_task_user_declined_idle_cb, state); - g_source_set_name_by_id (idle_id, "[PkTask] user-declined"); + idle_source = g_idle_source_new (); + g_source_set_callback (idle_source, (GSourceFunc) pk_task_user_declined_idle_cb, state, NULL); + g_source_set_name (idle_source, "[PkTask] user-accept"); + g_source_attach (idle_source, g_main_context_get_thread_default ()); return TRUE; } -- 1.8.3.1