From b2f3b674946ae9b1f335b4222f7942067f232baa Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 3 Mar 2015 13:36:07 +0100 Subject: [PATCH] searchenginetracker: Keep a reference on the search engine while querying The object might be destroyed when mid operation, causing crashes as the query callback still expects the object pointer to be valid. Also, remove the gdk_threads_enter/leave pairs, the callback will be executed on the caller (UI) thread, so this is not necessary. https://bugzilla.gnome.org/show_bug.cgi?id=745479 --- gtk/gtksearchenginetracker.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/gtk/gtksearchenginetracker.c b/gtk/gtksearchenginetracker.c index 9102eb538b..d1505c1096 100644 --- a/gtk/gtksearchenginetracker.c +++ b/gtk/gtksearchenginetracker.c @@ -287,8 +287,6 @@ query_callback (GObject *object, GError *error = NULL; gint i, n; - gdk_threads_enter (); - tracker = GTK_SEARCH_ENGINE_TRACKER (user_data); tracker->priv->query_pending = FALSE; @@ -298,14 +296,14 @@ query_callback (GObject *object, { _gtk_search_engine_error (GTK_SEARCH_ENGINE (tracker), error->message); g_error_free (error); - gdk_threads_leave (); + g_object_unref (tracker); return; } if (!reply) { _gtk_search_engine_finished (GTK_SEARCH_ENGINE (tracker)); - gdk_threads_leave (); + g_object_unref (tracker); return; } @@ -333,7 +331,7 @@ query_callback (GObject *object, g_variant_unref (reply); g_variant_unref (r); - gdk_threads_leave (); + g_object_unref (tracker); } static void @@ -393,7 +391,7 @@ gtk_search_engine_tracker_start (GtkSearchEngine *engine) g_debug ("SearchEngineTracker: query: %s", sparql->str); - get_query_results (tracker, sparql->str, query_callback, tracker); + get_query_results (tracker, sparql->str, query_callback, g_object_ref (tracker)); g_string_free (sparql, TRUE); g_free (search_text);