summaryrefslogtreecommitdiff
path: root/gtk/gtksearchenginetracker.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2015-03-03 13:36:07 +0100
committerCarlos Garnacho <carlosg@gnome.org>2015-03-03 17:57:08 +0100
commitb2f3b674946ae9b1f335b4222f7942067f232baa (patch)
tree4ee8521098de3ac843a29d3b11f42df4d843363b /gtk/gtksearchenginetracker.c
parenta994f4edfb744b83e392d1b8dd8689b5b146ce01 (diff)
downloadgtk+-b2f3b674946ae9b1f335b4222f7942067f232baa.tar.gz
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
Diffstat (limited to 'gtk/gtksearchenginetracker.c')
-rw-r--r--gtk/gtksearchenginetracker.c10
1 files 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);