[nautilus/wip/csoriano/search-popover: 38/40] query: make date range retrieval thread safe



commit 111b8bab2497abb3ae70d037c9c34a3158e551e4
Author: Carlos Soriano <csoriano gnome org>
Date:   Tue Feb 2 16:05:21 2016 +0100

    query: make date range retrieval thread safe
    
    We are accessing it from multiple threads of the search, so we need
    to make sure we don't free it in the middle.

 libnautilus-private/nautilus-query.c               |   16 ++++++++++++++++
 libnautilus-private/nautilus-search-engine-model.c |    1 +
 .../nautilus-search-engine-simple.c                |    1 +
 .../nautilus-search-engine-tracker.c               |    1 +
 4 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/libnautilus-private/nautilus-query.c b/libnautilus-private/nautilus-query.c
index 83293e8..50dee19 100644
--- a/libnautilus-private/nautilus-query.c
+++ b/libnautilus-private/nautilus-query.c
@@ -506,11 +506,27 @@ nautilus_query_set_search_type (NautilusQuery           *query,
         }
 }
 
+/**
+ * nautilus_query_get_date_range:
+ * @query: a #NautilusQuery
+ *
+ * Retrieves the #GptrArray composed of #GDateTime representing the date range.
+ * This function is thread safe.
+ *
+ * Returns: (transfer full): the #GptrArray composed of #GDateTime representing the date range.
+ */
 GPtrArray*
 nautilus_query_get_date_range (NautilusQuery *query)
 {
+        static GMutex mutex;
+
         g_return_val_if_fail (NAUTILUS_IS_QUERY (query), NULL);
 
+        g_mutex_lock (&mutex);
+        if (query->date_range)
+                g_ptr_array_ref (query->date_range);
+        g_mutex_unlock (&mutex);
+
         return query->date_range;
 }
 
diff --git a/libnautilus-private/nautilus-search-engine-model.c 
b/libnautilus-private/nautilus-search-engine-model.c
index 8a6b7a2..3b2875c 100644
--- a/libnautilus-private/nautilus-search-engine-model.c
+++ b/libnautilus-private/nautilus-search-engine-model.c
@@ -174,6 +174,7 @@ model_directory_ready_cb (NautilusDirectory *directory,
                         found = nautilus_file_date_in_between (current_file_unix_time,
                                                                initial_date,
                                                                end_date);
+                        g_ptr_array_unref (date_range);
                 }
 
                if (found) {
diff --git a/libnautilus-private/nautilus-search-engine-simple.c 
b/libnautilus-private/nautilus-search-engine-simple.c
index e6deed9..9ce05de 100644
--- a/libnautilus-private/nautilus-search-engine-simple.c
+++ b/libnautilus-private/nautilus-search-engine-simple.c
@@ -279,6 +279,7 @@ visit_directory (GFile *dir, SearchThreadData *data)
                         found = nautilus_file_date_in_between (current_file_time,
                                                                initial_date,
                                                                end_date);
+                        g_ptr_array_unref (date_range);
                 }
 
                if (found) {
diff --git a/libnautilus-private/nautilus-search-engine-tracker.c 
b/libnautilus-private/nautilus-search-engine-tracker.c
index 3f6adf9..356a629 100644
--- a/libnautilus-private/nautilus-search-engine-tracker.c
+++ b/libnautilus-private/nautilus-search-engine-tracker.c
@@ -354,6 +354,7 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
 
                 g_free (initial_date_format);
                 g_free (end_date_format);
+                g_ptr_array_unref (date_range);
         }
 
        if (mime_count > 0) {


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