[tracker] libtracker-miner: Fix cancellation of data_provider_begin()
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] libtracker-miner: Fix cancellation of data_provider_begin()
- Date: Sun, 9 Jul 2017 23:26:42 +0000 (UTC)
commit 8a3075343512208a8e3be297259cea877f133418
Author: Carlos Garnacho <carlosg gnome org>
Date: Mon Jul 10 01:11:56 2017 +0200
libtracker-miner: Fix cancellation of data_provider_begin()
The async op is not owner of the user data, so it may be actually
gone in the GAsyncReadyCallback. Ensure we only use it on success
or on other errors than cancelled, fixes crashes in tracker-crawler
crawl-interrupted test after commit b4f7b84fe4 because
tracker_crawler_stop() is now called at a time that triggers this.
src/libtracker-miner/tracker-crawler.c | 28 ++++++++++++++--------------
1 files changed, 14 insertions(+), 14 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
index 0af8d1f..78367e4 100644
--- a/src/libtracker-miner/tracker-crawler.c
+++ b/src/libtracker-miner/tracker-crawler.c
@@ -964,25 +964,25 @@ data_provider_begin_cb (GObject *object,
enumerator = tracker_data_provider_begin_finish (TRACKER_DATA_PROVIDER (object), result, &error);
info = user_data;
- dpd = info->dpd;
- dpd->enumerator = enumerator;
- if (!dpd->enumerator) {
- if (error) {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
- gchar *uri = g_file_get_uri (dpd->dir_file);
- g_warning ("Could not enumerate container / directory '%s', %s",
- uri, error ? error->message : "no error given");
- g_free (uri);
- }
- g_clear_error (&error);
- }
+ if (error) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ gchar *uri;
- process_func_start (dpd->crawler);
+ dpd = info->dpd;
+ uri = g_file_get_uri (dpd->dir_file);
+ g_warning ("Could not enumerate container / directory '%s', %s",
+ uri, error ? error->message : "no error given");
+ g_free (uri);
+ process_func_start (dpd->crawler);
+ }
+ g_clear_error (&error);
return;
}
- g_file_enumerator_next_files_async (dpd->enumerator,
+ dpd = info->dpd;
+ dpd->enumerator = enumerator;
+ g_file_enumerator_next_files_async (enumerator,
MAX_SIMULTANEOUS_ITEMS,
G_PRIORITY_LOW,
dpd->crawler->priv->cancellable,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]