[gtk+] searchenginetracker: Keep a reference on the search engine while querying



commit b2f3b674946ae9b1f335b4222f7942067f232baa
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Mar 3 13:36:07 2015 +0100

    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 files changed, 4 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtksearchenginetracker.c b/gtk/gtksearchenginetracker.c
index 9102eb5..d1505c1 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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]