tracker r1987 - in branches/indexer-split: . src/trackerd
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1987 - in branches/indexer-split: . src/trackerd
- Date: Mon, 4 Aug 2008 09:45:45 +0000 (UTC)
Author: mr
Date: Mon Aug 4 09:45:45 2008
New Revision: 1987
URL: http://svn.gnome.org/viewvc/tracker?rev=1987&view=rev
Log:
* src/trackerd/tracker-daemon.c: Fixed referencing so we now
actually finalize the daemon and the processor modules.
* src/trackerd/tracker-marshal.list:
* src/trackerd/tracker-monitor.c: Added "is_directory" boolean
to monitor events.
* src/trackerd/tracker-processor.c: Now we create a TrackerCrawler
for each module and we don't clean them up after the module is
processed, we keep them around for the duration of the daemon's
life. The reason being, we need to make sure we can call on the
crawler for monitor event path filtering.
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/trackerd/tracker-crawler.c
branches/indexer-split/src/trackerd/tracker-crawler.h
branches/indexer-split/src/trackerd/tracker-daemon.c
branches/indexer-split/src/trackerd/tracker-marshal.list
branches/indexer-split/src/trackerd/tracker-monitor.c
branches/indexer-split/src/trackerd/tracker-processor.c
Modified: branches/indexer-split/src/trackerd/tracker-crawler.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-crawler.c (original)
+++ branches/indexer-split/src/trackerd/tracker-crawler.c Mon Aug 4 09:45:45 2008
@@ -269,14 +269,15 @@
*/
static gboolean
-path_should_be_ignored (TrackerCrawler *crawler,
- const gchar *path,
- gboolean is_directory)
+is_path_ignored (TrackerCrawler *crawler,
+ const gchar *path,
+ gboolean is_directory)
{
GList *l;
gchar *basename;
gboolean ignore;
+
if (tracker_is_empty_string (path)) {
return TRUE;
}
@@ -347,7 +348,7 @@
path = g_file_get_path (file);
- if (path_should_be_ignored (crawler, path, FALSE)) {
+ if (is_path_ignored (crawler, path, FALSE)) {
crawler->private->files_ignored++;
g_debug ("Ignored:'%s' (%d)",
@@ -376,7 +377,7 @@
path = g_file_get_path (file);
- if (path_should_be_ignored (crawler, path, TRUE)) {
+ if (is_path_ignored (crawler, path, TRUE)) {
crawler->private->directories_ignored++;
g_debug ("Ignored:'%s' (%d)",
@@ -861,3 +862,18 @@
priv->use_module_paths = use_paths;
}
+
+gboolean
+tracker_crawler_is_path_ignored (TrackerCrawler *crawler,
+ const gchar *path,
+ gboolean is_directory)
+{
+ g_return_val_if_fail (TRACKER_IS_CRAWLER (crawler), TRUE);
+
+ /* We have an internal function here we call. The reason for
+ * this is that it is expensive to type check the Crawler
+ * object for EVERY file we process. Internally, we don't do
+ * that. Externally we do.
+ */
+ return is_path_ignored (crawler, path, is_directory);
+}
Modified: branches/indexer-split/src/trackerd/tracker-crawler.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-crawler.h (original)
+++ branches/indexer-split/src/trackerd/tracker-crawler.h Mon Aug 4 09:45:45 2008
@@ -54,6 +54,9 @@
const gchar *module_name);
gboolean tracker_crawler_start (TrackerCrawler *crawler);
void tracker_crawler_stop (TrackerCrawler *crawler);
+gboolean tracker_crawler_is_path_ignored (TrackerCrawler *crawler,
+ const gchar *path,
+ gboolean is_directory);
/* Convenience API for old .cfg file */
void tracker_crawler_add_path (TrackerCrawler *crawler,
Modified: branches/indexer-split/src/trackerd/tracker-daemon.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-daemon.c (original)
+++ branches/indexer-split/src/trackerd/tracker-daemon.c Mon Aug 4 09:45:45 2008
@@ -143,10 +143,10 @@
dbus_g_proxy_disconnect_signal (priv->indexer_proxy, "Continued",
G_CALLBACK (indexer_continued_cb),
- daemon);
+ NULL);
dbus_g_proxy_disconnect_signal (priv->indexer_proxy, "Paused",
G_CALLBACK (indexer_paused_cb),
- daemon);
+ NULL);
g_object_unref (priv->indexer_proxy);
g_object_unref (priv->processor);
@@ -178,12 +178,12 @@
dbus_g_proxy_connect_signal (proxy, "Paused",
G_CALLBACK (indexer_paused_cb),
- g_object_ref (object),
- (GClosureNotify) g_object_unref);
+ object,
+ NULL);
dbus_g_proxy_connect_signal (proxy, "Continued",
G_CALLBACK (indexer_continued_cb),
- g_object_ref (object),
- (GClosureNotify) g_object_unref);
+ object,
+ NULL);
return object;
}
Modified: branches/indexer-split/src/trackerd/tracker-marshal.list
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-marshal.list (original)
+++ branches/indexer-split/src/trackerd/tracker-marshal.list Mon Aug 4 09:45:45 2008
@@ -2,6 +2,7 @@
VOID:STRING,STRING,INT,INT,INT
VOID:STRING,STRING,STRING
VOID:STRING,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN
+VOID:STRING,OBJECT,BOOLEAN
VOID:STRING,OBJECT
# XESAM signals -- HitsRemoved, HitsModified
Modified: branches/indexer-split/src/trackerd/tracker-monitor.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-monitor.c (original)
+++ branches/indexer-split/src/trackerd/tracker-monitor.c Mon Aug 4 09:45:45 2008
@@ -73,33 +73,36 @@
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- tracker_marshal_VOID__STRING_OBJECT,
+ tracker_marshal_VOID__STRING_OBJECT_BOOLEAN,
G_TYPE_NONE,
- 2,
+ 3,
G_TYPE_STRING,
- G_TYPE_OBJECT);
+ G_TYPE_OBJECT,
+ G_TYPE_BOOLEAN);
signals[ITEM_UPDATED] =
g_signal_new ("item-updated",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- tracker_marshal_VOID__STRING_OBJECT,
+ tracker_marshal_VOID__STRING_OBJECT_BOOLEAN,
G_TYPE_NONE,
- 2,
+ 3,
G_TYPE_STRING,
- G_TYPE_OBJECT);
+ G_TYPE_OBJECT,
+ G_TYPE_BOOLEAN);
signals[ITEM_DELETED] =
g_signal_new ("item-deleted",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- tracker_marshal_VOID__STRING_OBJECT,
+ tracker_marshal_VOID__STRING_OBJECT_BOOLEAN,
G_TYPE_NONE,
- 2,
+ 3,
G_TYPE_STRING,
- G_TYPE_OBJECT);
+ G_TYPE_OBJECT,
+ G_TYPE_BOOLEAN);
g_type_class_add_private (object_class, sizeof (TrackerMonitorPrivate));
}
@@ -332,6 +335,7 @@
{
TrackerMonitor *monitor;
TrackerMonitorPrivate *priv;
+ gboolean is_directory = TRUE;
const gchar *module_name;
gchar *str1;
gchar *str2;
@@ -365,6 +369,8 @@
return;
}
+
+ is_directory = FALSE;
}
if (other_file) {
@@ -383,19 +389,19 @@
case G_FILE_MONITOR_EVENT_CHANGED:
case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
- g_signal_emit (monitor, signals[ITEM_UPDATED], 0, module_name, file);
+ g_signal_emit (monitor, signals[ITEM_UPDATED], 0, module_name, file, is_directory);
break;
case G_FILE_MONITOR_EVENT_DELETED:
- g_signal_emit (monitor, signals[ITEM_DELETED], 0, module_name, file);
+ g_signal_emit (monitor, signals[ITEM_DELETED], 0, module_name, file, is_directory);
break;
case G_FILE_MONITOR_EVENT_CREATED:
- g_signal_emit (monitor, signals[ITEM_CREATED], 0, module_name, file);
+ g_signal_emit (monitor, signals[ITEM_CREATED], 0, module_name, file, is_directory);
break;
case G_FILE_MONITOR_EVENT_PRE_UNMOUNT:
- g_signal_emit (monitor, signals[ITEM_DELETED], 0, module_name, file);
+ g_signal_emit (monitor, signals[ITEM_DELETED], 0, module_name, file, is_directory);
break;
case G_FILE_MONITOR_EVENT_UNMOUNTED:
Modified: branches/indexer-split/src/trackerd/tracker-processor.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-processor.c (original)
+++ branches/indexer-split/src/trackerd/tracker-processor.c Mon Aug 4 09:45:45 2008
@@ -61,10 +61,12 @@
TrackerConfig *config;
TrackerHal *hal;
TrackerMonitor *monitor;
- TrackerCrawler *crawler;
DBusGProxy *indexer_proxy;
+ /* Crawlers */
+ GHashTable *crawlers;
+
/* File queues for indexer */
guint item_queues_handler_id;
@@ -103,6 +105,7 @@
};
static void tracker_processor_finalize (GObject *object);
+static void crawler_destroy_notify (gpointer data);
static void item_queue_destroy_notify (gpointer data);
static void process_module_next (TrackerProcessor *processor);
static void indexer_status_cb (DBusGProxy *proxy,
@@ -118,14 +121,17 @@
static void monitor_item_created_cb (TrackerMonitor *monitor,
const gchar *module_name,
GFile *file,
+ gboolean is_directory,
gpointer user_data);
static void monitor_item_updated_cb (TrackerMonitor *monitor,
const gchar *module_name,
GFile *file,
+ gboolean is_directory,
gpointer user_data);
static void monitor_item_deleted_cb (TrackerMonitor *monitor,
const gchar *module_name,
GFile *file,
+ gboolean is_directory,
gpointer user_data);
static void crawler_processing_file_cb (TrackerCrawler *crawler,
const gchar *module_name,
@@ -185,6 +191,16 @@
priv->modules = tracker_module_config_get_modules ();
+ /* For each module we create a TrackerCrawler and keep them in
+ * a hash table to look up.
+ */
+ priv->crawlers =
+ g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ crawler_destroy_notify);
+
+
/* For each module we create a hash table for queues for items
* to update/create/delete in the indexer. This is sent on
* when the queue is processed.
@@ -249,29 +265,20 @@
g_hash_table_unref (priv->items_created_queues);
}
+ if (priv->crawlers) {
+ g_hash_table_unref (priv->crawlers);
+ }
+
g_list_free (priv->modules);
dbus_g_proxy_disconnect_signal (priv->indexer_proxy, "Finished",
G_CALLBACK (indexer_finished_cb),
- processor);
+ NULL);
dbus_g_proxy_disconnect_signal (priv->indexer_proxy, "Status",
G_CALLBACK (indexer_status_cb),
- processor);
+ NULL);
g_object_unref (priv->indexer_proxy);
- if (priv->crawler) {
- g_signal_handlers_disconnect_by_func (priv->crawler,
- G_CALLBACK (crawler_processing_file_cb),
- object);
- g_signal_handlers_disconnect_by_func (priv->crawler,
- G_CALLBACK (crawler_processing_directory_cb),
- object);
- g_signal_handlers_disconnect_by_func (priv->crawler,
- G_CALLBACK (crawler_finished_cb),
- object);
- g_object_unref (priv->crawler);
- }
-
g_signal_handlers_disconnect_by_func (priv->monitor,
G_CALLBACK (monitor_item_deleted_cb),
object);
@@ -432,6 +439,47 @@
}
static void
+crawler_destroy_notify (gpointer data)
+{
+ TrackerCrawler *crawler;
+
+ crawler = TRACKER_CRAWLER (data);
+
+ if (crawler) {
+ guint signals;
+
+ signals = g_signal_handlers_disconnect_matched (crawler,
+ G_SIGNAL_MATCH_FUNC,
+ 0,
+ 0,
+ NULL,
+ G_CALLBACK (crawler_processing_file_cb),
+ NULL);
+ g_return_if_fail (signals > 0);
+
+ signals = g_signal_handlers_disconnect_matched (crawler,
+ G_SIGNAL_MATCH_FUNC,
+ 0,
+ 0,
+ NULL,
+ G_CALLBACK (crawler_processing_directory_cb),
+ NULL);
+ g_return_if_fail (signals > 0);
+
+ signals = g_signal_handlers_disconnect_matched (crawler,
+ G_SIGNAL_MATCH_FUNC,
+ 0,
+ 0,
+ NULL,
+ G_CALLBACK (crawler_finished_cb),
+ NULL);
+ g_return_if_fail (signals > 0);
+
+ g_object_unref (crawler);
+ }
+}
+
+static void
item_queue_destroy_notify (gpointer data)
{
GQueue *queue;
@@ -626,11 +674,15 @@
process_module_files_add_removable_media (TrackerProcessor *processor)
{
TrackerProcessorPrivate *priv;
+ TrackerCrawler *crawler;
GSList *roots;
GSList *l;
+ const gchar *module_name = "files";
priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+ crawler = g_hash_table_lookup (priv->crawlers, module_name);
+
#ifdef HAVE_HAL
roots = tracker_hal_get_removable_device_roots (priv->hal);
#else /* HAVE_HAL */
@@ -651,7 +703,7 @@
g_message (" %s", (gchar*) l->data);
file = g_file_new_for_path (l->data);
- tracker_monitor_add (priv->monitor, "files", file);
+ tracker_monitor_add (priv->monitor, module_name, file);
g_object_unref (file);
}
@@ -669,25 +721,29 @@
}
g_message (" %s", (gchar*) l->data);
- tracker_crawler_add_path (priv->crawler, l->data);
+ tracker_crawler_add_path (crawler, l->data);
}
if (g_slist_length (roots) == 0) {
g_message (" NONE");
}
- tracker_crawler_set_use_module_paths (priv->crawler, FALSE);
+ tracker_crawler_set_use_module_paths (crawler, FALSE);
}
static void
process_module_files_add_legacy_options (TrackerProcessor *processor)
{
TrackerProcessorPrivate *priv;
+ TrackerCrawler *crawler;
GSList *roots;
GSList *l;
+ const gchar *module_name = "files";
priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+ crawler = g_hash_table_lookup (priv->crawlers, module_name);
+
/* This module get special treatment to make sure legacy
* options are supported.
*/
@@ -699,7 +755,7 @@
g_message (" %s", (gchar*) l->data);
file = g_file_new_for_path (l->data);
- tracker_monitor_add (priv->monitor, "files", file);
+ tracker_monitor_add (priv->monitor, module_name, file);
g_object_unref (file);
}
@@ -712,7 +768,7 @@
for (l = roots; l; l = l->next) {
g_message (" %s", (gchar*) l->data);
- tracker_crawler_add_path (priv->crawler, l->data);
+ tracker_crawler_add_path (crawler, l->data);
}
if (g_slist_length (roots) == 0) {
@@ -726,6 +782,7 @@
gboolean is_removable_media)
{
TrackerProcessorPrivate *priv;
+ TrackerCrawler *crawler;
GSList *disabled_modules;
priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
@@ -763,7 +820,9 @@
/* Gets all files and directories */
tracker_status_set_and_signal (TRACKER_STATUS_PENDING);
- if (!tracker_crawler_start (priv->crawler)) {
+ crawler = g_hash_table_lookup (priv->crawlers, module_name);
+
+ if (!tracker_crawler_start (crawler)) {
/* If there is nothing to crawl, we are done, process
* the next module.
*/
@@ -772,58 +831,6 @@
}
static void
-process_module_create_crawler (TrackerProcessor *processor,
- const gchar *module_name)
-{
- TrackerProcessorPrivate *priv;
- TrackerCrawler *crawler;
-
- priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
-
- crawler = tracker_crawler_new (priv->config,
- priv->hal,
- module_name);
-
- g_signal_connect (crawler, "processing-file",
- G_CALLBACK (crawler_processing_file_cb),
- processor);
- g_signal_connect (crawler, "processing-directory",
- G_CALLBACK (crawler_processing_directory_cb),
- processor);
- g_signal_connect (crawler, "finished",
- G_CALLBACK (crawler_finished_cb),
- processor);
-
- priv->crawler = crawler;
-}
-
-static void
-process_module_free_crawler (TrackerProcessor *processor)
-{
- TrackerProcessorPrivate *priv;
- TrackerCrawler *crawler;
-
- priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
-
- crawler = priv->crawler;
- priv->crawler = NULL;
-
- if (crawler) {
- g_signal_handlers_disconnect_by_func (crawler,
- G_CALLBACK (crawler_processing_file_cb),
- processor);
- g_signal_handlers_disconnect_by_func (crawler,
- G_CALLBACK (crawler_processing_directory_cb),
- processor);
- g_signal_handlers_disconnect_by_func (crawler,
- G_CALLBACK (crawler_finished_cb),
- processor);
-
- g_object_unref (crawler);
- }
-}
-
-static void
process_module_next (TrackerProcessor *processor)
{
TrackerProcessorPrivate *priv;
@@ -831,9 +838,6 @@
priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
- /* Clean up last module's work */
- process_module_free_crawler (processor);
-
/* Don't recursively iterate the modules if this function is
* called, check first.
*/
@@ -867,7 +871,6 @@
}
/* Set up new crawler for new module */
- process_module_create_crawler (processor, module_name);
process_module (processor, module_name, priv->iterated_removable_media);
}
@@ -983,7 +986,6 @@
items_done);
g_free (str);
-
/* Do we even need this step Optimizing ? */
tracker_status_set_and_signal (TRACKER_STATUS_OPTIMIZING);
@@ -999,13 +1001,31 @@
monitor_item_created_cb (TrackerMonitor *monitor,
const gchar *module_name,
GFile *file,
+ gboolean is_directory,
gpointer user_data)
{
TrackerProcessorPrivate *priv;
+ TrackerCrawler *crawler;
GQueue *queue;
+ gboolean ignored;
+ gchar *path;
priv = TRACKER_PROCESSOR_GET_PRIVATE (user_data);
+ path = g_file_get_path (file);
+ crawler = g_hash_table_lookup (priv->crawlers, module_name);
+ ignored = tracker_crawler_is_path_ignored (crawler, path, is_directory);
+
+ g_debug ("%s:'%s' (created monitor event)",
+ ignored ? "Ignored" : "Found ",
+ path);
+
+ g_free (path);
+
+ if (ignored) {
+ return;
+ }
+
queue = g_hash_table_lookup (priv->items_created_queues, module_name);
g_queue_push_tail (queue, g_object_ref (file));
@@ -1016,13 +1036,31 @@
monitor_item_updated_cb (TrackerMonitor *monitor,
const gchar *module_name,
GFile *file,
+ gboolean is_directory,
gpointer user_data)
{
TrackerProcessorPrivate *priv;
+ TrackerCrawler *crawler;
GQueue *queue;
+ gchar *path;
+ gboolean ignored;
priv = TRACKER_PROCESSOR_GET_PRIVATE (user_data);
+ path = g_file_get_path (file);
+ crawler = g_hash_table_lookup (priv->crawlers, module_name);
+ ignored = tracker_crawler_is_path_ignored (crawler, path, is_directory);
+
+ g_debug ("%s:'%s' (updated monitor event)",
+ ignored ? "Ignored" : "Found ",
+ path);
+
+ g_free (path);
+
+ if (ignored) {
+ return;
+ }
+
queue = g_hash_table_lookup (priv->items_updated_queues, module_name);
g_queue_push_tail (queue, g_object_ref (file));
@@ -1033,13 +1071,31 @@
monitor_item_deleted_cb (TrackerMonitor *monitor,
const gchar *module_name,
GFile *file,
+ gboolean is_directory,
gpointer user_data)
{
TrackerProcessorPrivate *priv;
+ TrackerCrawler *crawler;
GQueue *queue;
+ gchar *path;
+ gboolean ignored;
priv = TRACKER_PROCESSOR_GET_PRIVATE (user_data);
+ path = g_file_get_path (file);
+ crawler = g_hash_table_lookup (priv->crawlers, module_name);
+ ignored = tracker_crawler_is_path_ignored (crawler, path, is_directory);
+
+ g_debug ("%s:'%s' (updated monitor event)",
+ ignored ? "Ignored" : "Found ",
+ path);
+
+ g_free (path);
+
+ if (ignored) {
+ return;
+ }
+
queue = g_hash_table_lookup (priv->items_deleted_queues, module_name);
g_queue_push_tail (queue, g_object_ref (file));
@@ -1052,7 +1108,6 @@
GFile *file,
gpointer user_data)
{
-
TrackerProcessorPrivate *priv;
GQueue *queue;
@@ -1071,8 +1126,8 @@
{
TrackerProcessorPrivate *priv;
- gboolean add_monitor;
GQueue *queue;
+ gboolean add_monitor;
priv = TRACKER_PROCESSOR_GET_PRIVATE (user_data);
@@ -1089,7 +1144,6 @@
/* Add files in queue to our queues to send to the indexer */
queue = g_hash_table_lookup (priv->items_created_queues, module_name);
- g_return_if_fail (queue);
g_queue_push_tail (queue, g_object_ref (file));
}
@@ -1174,7 +1228,9 @@
{
TrackerProcessor *processor;
TrackerProcessorPrivate *priv;
+ TrackerCrawler *crawler;
DBusGProxy *proxy;
+ GList *l;
g_return_val_if_fail (TRACKER_IS_CONFIG (config), NULL);
@@ -1188,9 +1244,11 @@
priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+ /* Set up config */
priv->config = g_object_ref (config);
#ifdef HAVE_HAL
+ /* Set up hal */
priv->hal = g_object_ref (hal);
g_signal_connect (priv->hal, "mount-point-added",
@@ -1201,6 +1259,28 @@
processor);
#endif /* HAVE_HAL */
+ /* Set up the crawlers now we have config and hal */
+ for (l = priv->modules; l; l = l->next) {
+ crawler = tracker_crawler_new (priv->config,
+ priv->hal,
+ l->data);
+
+ g_signal_connect (crawler, "processing-file",
+ G_CALLBACK (crawler_processing_file_cb),
+ processor);
+ g_signal_connect (crawler, "processing-directory",
+ G_CALLBACK (crawler_processing_directory_cb),
+ processor);
+ g_signal_connect (crawler, "finished",
+ G_CALLBACK (crawler_finished_cb),
+ processor);
+
+ g_hash_table_insert (priv->crawlers,
+ g_strdup (l->data),
+ crawler);
+ }
+
+ /* Set up the monitor */
priv->monitor = tracker_monitor_new (config);
g_signal_connect (priv->monitor, "item-created",
@@ -1221,12 +1301,12 @@
dbus_g_proxy_connect_signal (proxy, "Status",
G_CALLBACK (indexer_status_cb),
- g_object_ref (processor),
- (GClosureNotify) g_object_unref);
+ processor,
+ NULL);
dbus_g_proxy_connect_signal (proxy, "Finished",
G_CALLBACK (indexer_finished_cb),
- g_object_ref (processor),
- (GClosureNotify) g_object_unref);
+ processor,
+ NULL);
return processor;
}
@@ -1264,7 +1344,11 @@
priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
if (priv->interrupted) {
- tracker_crawler_stop (priv->crawler);
+ TrackerCrawler *crawler;
+
+ crawler = g_hash_table_lookup (priv->crawlers,
+ priv->current_module->data);
+ tracker_crawler_stop (crawler);
}
g_message ("Process %s\n",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]