[tracker/rss-enclosures] tracker-store: Make set_active wait for the currently running query Fixes NB#201122
- From: Roberto Guido <rguido src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/rss-enclosures] tracker-store: Make set_active wait for the currently running query Fixes NB#201122
- Date: Wed, 24 Nov 2010 02:22:41 +0000 (UTC)
commit 1dc43e2b234dddc3139c85902d90dd08c67cc768
Author: Philip Van Hoof <philip codeminded be>
Date: Wed Nov 3 17:34:48 2010 +0200
tracker-store: Make set_active wait for the currently running query
Fixes NB#201122
src/tracker-store/tracker-backup.c | 13 ++++---------
src/tracker-store/tracker-main.c | 2 +-
src/tracker-store/tracker-store.c | 34 +++++++++++++++++++++++-----------
src/tracker-store/tracker-store.h | 4 +++-
4 files changed, 31 insertions(+), 22 deletions(-)
---
diff --git a/src/tracker-store/tracker-backup.c b/src/tracker-store/tracker-backup.c
index d030433..f73973e 100644
--- a/src/tracker-store/tracker-backup.c
+++ b/src/tracker-store/tracker-backup.c
@@ -107,8 +107,8 @@ tracker_backup_save (TrackerBackup *object,
g_object_unref (destination);
}
-static gboolean
-backup_idle (gpointer user_data)
+static void
+backup_idle_set_active_false_cb (gpointer user_data)
{
TrackerDBusMethodInfo *info = user_data;
GFile *journal;
@@ -118,8 +118,6 @@ backup_idle (gpointer user_data)
journal = g_file_new_for_uri (info->journal_uri);
- tracker_store_set_active (FALSE);
-
notifier = TRACKER_STATUS (tracker_dbus_get_object (TRACKER_TYPE_STATUS));
busy_callback = tracker_status_get_callback (notifier,
@@ -135,11 +133,9 @@ backup_idle (gpointer user_data)
busy_callback,
busy_user_data);
- tracker_store_set_active (TRUE);
-
g_object_unref (journal);
- return FALSE;
+ tracker_store_set_active (TRUE, NULL, NULL);
}
void
@@ -163,7 +159,6 @@ tracker_backup_restore (TrackerBackup *object,
info->context = context;
info->journal_uri = g_strdup (journal_uri);
- g_idle_add (backup_idle, info);
-
+ tracker_store_set_active (FALSE, backup_idle_set_active_false_cb, info);
}
diff --git a/src/tracker-store/tracker-main.c b/src/tracker-store/tracker-main.c
index 6996bce..b9d2801 100644
--- a/src/tracker-store/tracker-main.c
+++ b/src/tracker-store/tracker-main.c
@@ -521,7 +521,7 @@ main (gint argc, gchar *argv[])
tracker_events_init (get_notifiable_classes);
tracker_writeback_init (get_writeback_predicates);
- tracker_store_set_active (TRUE);
+ tracker_store_set_active (TRUE, NULL, NULL);
g_message ("Waiting for D-Bus requests...");
diff --git a/src/tracker-store/tracker-store.c b/src/tracker-store/tracker-store.c
index 2945294..68e2a4a 100644
--- a/src/tracker-store/tracker-store.c
+++ b/src/tracker-store/tracker-store.c
@@ -45,16 +45,18 @@
#define TRACKER_STORE_MAX_TASK_TIME 30
typedef struct {
- gboolean start_log;
- GQueue *query_queues[TRACKER_STORE_N_PRIORITIES];
- GQueue *update_queues[TRACKER_STORE_N_PRIORITIES];
- guint n_queries_running;
- gboolean update_running;
- GThreadPool *update_pool;
- GThreadPool *query_pool;
- GSList *running_tasks;
- guint max_task_time;
- gboolean active;
+ gboolean start_log;
+ GQueue *query_queues[TRACKER_STORE_N_PRIORITIES];
+ GQueue *update_queues[TRACKER_STORE_N_PRIORITIES];
+ guint n_queries_running;
+ gboolean update_running;
+ GThreadPool *update_pool;
+ GThreadPool *query_pool;
+ GSList *running_tasks;
+ guint max_task_time;
+ gboolean active;
+ GDestroyNotify active_callback;
+ gpointer active_user_data;
} TrackerStorePrivate;
typedef enum {
@@ -288,6 +290,11 @@ task_finish_cb (gpointer data)
store_task_free (task);
+ if (private->active_callback) {
+ private->active_callback (private->active_user_data);
+ private->active_callback = NULL;
+ }
+
sched (private);
return FALSE;
@@ -647,11 +654,16 @@ tracker_store_unreg_batches (const gchar *client_id)
}
void
-tracker_store_set_active (gboolean active)
+tracker_store_set_active (gboolean active,
+ GDestroyNotify callback,
+ gpointer user_data)
{
TrackerStorePrivate *private;
private = g_static_private_get (&private_key);
+
+ private->active_callback = callback;
+ private->active_user_data = user_data;
private->active = active;
sched (private);
diff --git a/src/tracker-store/tracker-store.h b/src/tracker-store/tracker-store.h
index 50c9fc1..46a6704 100644
--- a/src/tracker-store/tracker-store.h
+++ b/src/tracker-store/tracker-store.h
@@ -83,7 +83,9 @@ guint tracker_store_get_queue_size (void);
void tracker_store_unreg_batches (const gchar *client_id);
-void tracker_store_set_active (gboolean active);
+void tracker_store_set_active (gboolean active,
+ GDestroyNotify callback,
+ gpointer user_data);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]