[tracker/miner-fs-initable-iface: 8/8] tracker-miner-fs: Clean stop when initialiation of miner objects failed



commit d0143596f976f3678e5306bea5c02df503ffd691
Author: Aleksander Morgado <aleksander lanedo com>
Date:   Tue Feb 1 12:26:50 2011 +0100

    tracker-miner-fs: Clean stop when initialiation of miner objects failed

 src/miners/fs/tracker-main.c               |   41 ++++++++++++++++++++-------
 src/miners/fs/tracker-miner-applications.c |   11 +++-----
 src/miners/fs/tracker-miner-applications.h |    2 +-
 src/miners/fs/tracker-miner-files.c        |   32 ++++++++-------------
 src/miners/fs/tracker-miner-files.h        |   31 +++++++++++----------
 5 files changed, 63 insertions(+), 54 deletions(-)
---
diff --git a/src/miners/fs/tracker-main.c b/src/miners/fs/tracker-main.c
index 262489d..7a21143 100644
--- a/src/miners/fs/tracker-main.c
+++ b/src/miners/fs/tracker-main.c
@@ -204,7 +204,7 @@ should_crawl (TrackerConfig *config)
 		return TRUE;
 	} else {
 		guint64 then, now;
-		
+
 		then = tracker_db_manager_get_last_crawl_done ();
 
 		if (then < 1) {
@@ -529,7 +529,7 @@ main (gint argc, gchar *argv[])
 {
 	TrackerConfig *config;
 	TrackerMiner *miner_applications, *miner_files;
-	TrackerMinerFilesIndex *object;
+	TrackerMinerFilesIndex *miner_files_index;
 	GOptionContext *context;
 	GError *error = NULL;
 	gchar *log_filename = NULL;
@@ -600,17 +600,25 @@ main (gint argc, gchar *argv[])
 
 	main_loop = g_main_loop_new (NULL, FALSE);
 
-	miner_files = tracker_miner_files_new (config);
+	/* Create new TrackerMinerFiles object */
+	miner_files = tracker_miner_files_new (config, &error);
+	if (!miner_files) {
+		g_critical ("Couldn't create new Files miner: '%s'",
+		            error ? error->message : "unknown error");
+		g_object_unref (config);
+		tracker_log_shutdown ();
+
+		return EXIT_FAILURE;
+	}
 	tracker_miner_fs_set_initial_crawling (TRACKER_MINER_FS (miner_files),
 	                                       should_crawl (config));
-
 	g_signal_connect (miner_files, "finished",
 			  G_CALLBACK (miner_finished_cb),
 			  NULL);
 
-	object = tracker_miner_files_index_new (TRACKER_MINER_FILES (miner_files));
-
-	if (!object) {
+	/* Create new TrackerMinerFilesIndex object */
+	miner_files_index = tracker_miner_files_index_new (TRACKER_MINER_FILES (miner_files));
+	if (!miner_files_index) {
 		g_object_unref (miner_files);
 		g_object_unref (config);
 		tracker_log_shutdown ();
@@ -619,26 +627,37 @@ main (gint argc, gchar *argv[])
 	}
 
 	/* Create miner for applications */
-	miner_applications = tracker_miner_applications_new ();
-	miners = g_slist_append (miners, miner_applications);
+	miner_applications = tracker_miner_applications_new (&error);
+	if (!miner_applications) {
+		g_critical ("Couldn't create new Applications miner: '%s'",
+		            error ? error->message : "unknown error");
+		g_object_unref (miner_files_index);
+		g_object_unref (miner_files);
+		g_object_unref (config);
+		tracker_log_shutdown ();
 
+		return EXIT_FAILURE;
+	}
 	g_signal_connect (miner_applications, "finished",
 	                  G_CALLBACK (miner_finished_cb),
 	                  NULL);
 
-	/* Create miner for files */
-	miners = g_slist_append (miners, miner_files);
+	/* Setup miners, applications first in list */
+	miners = g_slist_prepend (miners, miner_files);
+	miners = g_slist_prepend (miners, miner_applications);
 
 	tracker_thumbnailer_init ();
 
 	miner_handle_next ();
 
+	/* Go, go, go! */
 	g_main_loop_run (main_loop);
 
 	g_message ("Shutdown started");
 
 	g_main_loop_unref (main_loop);
 	g_object_unref (config);
+	g_object_unref (miner_files_index);
 
 	tracker_thumbnailer_shutdown ();
 
diff --git a/src/miners/fs/tracker-miner-applications.c b/src/miners/fs/tracker-miner-applications.c
index f888be6..9559265 100644
--- a/src/miners/fs/tracker-miner-applications.c
+++ b/src/miners/fs/tracker-miner-applications.c
@@ -862,20 +862,17 @@ miner_applications_reset (TrackerMiner *miner)
 }
 
 TrackerMiner *
-tracker_miner_applications_new (void)
+tracker_miner_applications_new (GError **error)
 {
-	GError *error = NULL;
 	TrackerMiner *miner;
 
 	miner = g_initable_new (TRACKER_TYPE_MINER_APPLICATIONS,
 	                        NULL,
-	                        &error,
+	                        error,
 	                        "name", "Applications",
 	                        NULL);
-	if (!miner) {
-		g_critical ("Couldn't create new TrackerMinerApplications object: '%s'",
-		            error ? error->message : "Unknown error");
-	} else if (tracker_miner_applications_locale_changed ()) {
+	if (miner &&
+	    tracker_miner_applications_locale_changed ()) {
 		/* Before returning the newly created miner, check if we need
 		 * to reset it */
 		g_message ("Locale change detected, so resetting miner to "
diff --git a/src/miners/fs/tracker-miner-applications.h b/src/miners/fs/tracker-miner-applications.h
index 4f2db34..7ff1692 100644
--- a/src/miners/fs/tracker-miner-applications.h
+++ b/src/miners/fs/tracker-miner-applications.h
@@ -44,7 +44,7 @@ struct _TrackerMinerApplicationsClass {
 
 GType          tracker_miner_applications_get_type (void) G_GNUC_CONST;
 
-TrackerMiner * tracker_miner_applications_new (void);
+TrackerMiner * tracker_miner_applications_new (GError **error);
 
 G_END_DECLS
 
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 77bd09a..44459e3 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -2695,26 +2695,18 @@ miner_files_finished (TrackerMinerFS *fs)
 }
 
 TrackerMiner *
-tracker_miner_files_new (TrackerConfig *config)
-{
-	GError *error = NULL;
-	TrackerMiner *miner;
-
-	miner = g_initable_new (TRACKER_TYPE_MINER_FILES,
-	                        NULL,
-	                        &error,
-	                        "name", "Files",
-	                        "config", config,
-	                        "processing-pool-wait-limit", 10,
-	                        "processing-pool-ready-limit", 100,
-	                        "mtime-checking", should_check_mtime (config),
-	                        NULL);
-	if (!miner) {
-		g_critical ("Couldn't create new TrackerMinerFiles object: '%s'",
-		            error ? error->message : "Unknown error");
-	}
-
-	return miner;
+tracker_miner_files_new (TrackerConfig  *config,
+                         GError        **error)
+{
+	return g_initable_new (TRACKER_TYPE_MINER_FILES,
+	                       NULL,
+	                       error,
+	                       "name", "Files",
+	                       "config", config,
+	                       "processing-pool-wait-limit", 10,
+	                       "processing-pool-ready-limit", 100,
+	                       "mtime-checking", should_check_mtime (config),
+	                       NULL);
 }
 
 gboolean
diff --git a/src/miners/fs/tracker-miner-files.h b/src/miners/fs/tracker-miner-files.h
index 353631a..fc651fb 100644
--- a/src/miners/fs/tracker-miner-files.h
+++ b/src/miners/fs/tracker-miner-files.h
@@ -48,23 +48,24 @@ struct TrackerMinerFilesClass {
 
 GType         tracker_miner_files_get_type                 (void) G_GNUC_CONST;
 
-TrackerMiner *tracker_miner_files_new                      (TrackerConfig *config);
+TrackerMiner *tracker_miner_files_new                      (TrackerConfig  *config,
+                                                            GError        **error);
 
 /* Convenience functions for --eligible tracker-miner-fs cmdline */
-gboolean      tracker_miner_files_check_file               (GFile         *file,
-                                                            GSList        *ignored_file_paths,
-                                                            GSList        *ignored_file_patterns);
-gboolean      tracker_miner_files_check_directory          (GFile         *file,
-                                                            GSList        *index_recursive_directories,
-                                                            GSList        *index_single_directories,
-                                                            GSList        *ignored_directory_paths,
-                                                            GSList        *ignored_directory_patterns);
-gboolean      tracker_miner_files_check_directory_contents (GFile         *parent,
-                                                            GList         *children,
-                                                            GSList        *ignored_content);
-gboolean      tracker_miner_files_monitor_directory        (GFile         *file,
-                                                            gboolean       enable_monitors,
-                                                            GSList        *directories_to_check);
+gboolean      tracker_miner_files_check_file               (GFile          *file,
+                                                            GSList         *ignored_file_paths,
+                                                            GSList         *ignored_file_patterns);
+gboolean      tracker_miner_files_check_directory          (GFile          *file,
+                                                            GSList         *index_recursive_directories,
+                                                            GSList         *index_single_directories,
+                                                            GSList         *ignored_directory_paths,
+                                                            GSList         *ignored_directory_patterns);
+gboolean      tracker_miner_files_check_directory_contents (GFile          *parent,
+                                                            GList          *children,
+                                                            GSList         *ignored_content);
+gboolean      tracker_miner_files_monitor_directory        (GFile          *file,
+                                                            gboolean        enable_monitors,
+                                                            GSList         *directories_to_check);
 
 G_END_DECLS
 



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