diff options
author | Carlos Soriano <csoriano@gnome.org> | 2016-02-02 16:05:21 +0100 |
---|---|---|
committer | Carlos Soriano <csoriano@gnome.org> | 2016-02-03 16:33:55 +0100 |
commit | c12ffc6e80ff772157b5f6777991b140de7d3928 (patch) | |
tree | a9e6e918d6ea244b5fcddfde1da3076550716fc6 | |
parent | 543771728fb2a45feffd6f53235e4c4eaac87782 (diff) | |
download | nautilus-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.c | 16 | ||||
-rw-r--r-- | libnautilus-private/nautilus-search-engine-model.c | 1 | ||||
-rw-r--r-- | libnautilus-private/nautilus-search-engine-simple.c | 1 | ||||
-rw-r--r-- | libnautilus-private/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 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) { |