summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2016-02-02 16:05:21 +0100
committerCarlos Soriano <csoriano@gnome.org>2016-02-03 16:33:55 +0100
commitc12ffc6e80ff772157b5f6777991b140de7d3928 (patch)
treea9e6e918d6ea244b5fcddfde1da3076550716fc6
parent543771728fb2a45feffd6f53235e4c4eaac87782 (diff)
downloadnautilus-c12ffc6e80ff772157b5f6777991b140de7d3928.tar.gz
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.
-rw-r--r--libnautilus-private/nautilus-query.c16
-rw-r--r--libnautilus-private/nautilus-search-engine-model.c1
-rw-r--r--libnautilus-private/nautilus-search-engine-simple.c1
-rw-r--r--libnautilus-private/nautilus-search-engine-tracker.c1
4 files changed, 19 insertions, 0 deletions
diff --git a/libnautilus-private/nautilus-query.c b/libnautilus-private/nautilus-query.c
index 2912847e2..86dbac4fa 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 8a6b7a265..3b2875c94 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 e6deed9c1..9ce05de2b 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 ff0a35120..5a7160049 100644
--- a/libnautilus-private/nautilus-search-engine-tracker.c
+++ b/libnautilus-private/nautilus-search-engine-tracker.c
@@ -351,6 +351,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) {