diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2015-03-03 13:36:07 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2015-03-03 17:57:08 +0100 |
commit | b2f3b674946ae9b1f335b4222f7942067f232baa (patch) | |
tree | 4ee8521098de3ac843a29d3b11f42df4d843363b /gtk/gtksearchenginetracker.c | |
parent | a994f4edfb744b83e392d1b8dd8689b5b146ce01 (diff) | |
download | gtk+-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.c | 10 |
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); |