summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilip Van Hoof <philip@codeminded.be>2011-03-03 10:39:15 +0100
committerPhilip Van Hoof <philip@codeminded.be>2011-03-03 10:41:02 +0100
commit99bc09589da93a662bfa2627a17fa572e2c408ed (patch)
tree3bef47a75ed6b420eea5644aa90f5b3e1a220324 /src
parent872b939b9ac97b7bbf644107519b05ee2dc43309 (diff)
downloadtracker-99bc09589da93a662bfa2627a17fa572e2c408ed.tar.gz
libtracker-data: Make connection_get and connection_get_async robuster
With this it should be possible to mix using tracker_sparql_connection_get and tracker_sparql_connection_get_async without having to worry about concurrency.
Diffstat (limited to 'src')
-rw-r--r--src/libtracker-data/tracker-data-manager.c123
1 files changed, 76 insertions, 47 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 1a95d1ca1..eae9d8b30 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -3450,17 +3450,17 @@ load_ontologies_gvdb (GError **error)
g_free (filename);
}
-gboolean
-tracker_data_manager_init (TrackerDBManagerFlags flags,
- const gchar **test_schemas,
- gboolean *first_time,
- gboolean journal_check,
- guint select_cache_size,
- guint update_cache_size,
- TrackerBusyCallback busy_callback,
- gpointer busy_user_data,
- const gchar *busy_operation,
- GError **error)
+static gboolean
+tracker_data_manager_init_unlocked (TrackerDBManagerFlags flags,
+ const gchar **test_schemas,
+ gboolean *first_time,
+ gboolean journal_check,
+ guint select_cache_size,
+ guint update_cache_size,
+ TrackerBusyCallback busy_callback,
+ gpointer busy_user_data,
+ const gchar *busy_operation,
+ GError **error)
{
TrackerDBInterface *iface;
gboolean is_first_time_index, read_journal, check_ontology;
@@ -3857,16 +3857,16 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
initialized = TRUE;
tracker_data_manager_shutdown ();
- return tracker_data_manager_init (flags,
- test_schemas,
- first_time,
- journal_check,
- select_cache_size,
- update_cache_size,
- busy_callback,
- busy_user_data,
- busy_operation,
- error);
+ return tracker_data_manager_init_unlocked (flags,
+ test_schemas,
+ first_time,
+ journal_check,
+ select_cache_size,
+ update_cache_size,
+ busy_callback,
+ busy_user_data,
+ busy_operation,
+ error);
}
if (ontology_error) {
@@ -3923,16 +3923,16 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
initialized = TRUE;
tracker_data_manager_shutdown ();
- return tracker_data_manager_init (flags,
- test_schemas,
- first_time,
- journal_check,
- select_cache_size,
- update_cache_size,
- busy_callback,
- busy_user_data,
- busy_operation,
- error);
+ return tracker_data_manager_init_unlocked (flags,
+ test_schemas,
+ first_time,
+ journal_check,
+ select_cache_size,
+ update_cache_size,
+ busy_callback,
+ busy_user_data,
+ busy_operation,
+ error);
}
if (ontology_error) {
@@ -4016,16 +4016,16 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
initialized = TRUE;
tracker_data_manager_shutdown ();
- return tracker_data_manager_init (flags,
- test_schemas,
- first_time,
- journal_check,
- select_cache_size,
- update_cache_size,
- busy_callback,
- busy_user_data,
- busy_operation,
- error);
+ return tracker_data_manager_init_unlocked (flags,
+ test_schemas,
+ first_time,
+ journal_check,
+ select_cache_size,
+ update_cache_size,
+ busy_callback,
+ busy_user_data,
+ busy_operation,
+ error);
}
if (ontology_error) {
@@ -4136,6 +4136,41 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
return TRUE;
}
+gboolean
+tracker_data_manager_init (TrackerDBManagerFlags flags,
+ const gchar **test_schemas,
+ gboolean *first_time,
+ gboolean journal_check,
+ guint select_cache_size,
+ guint update_cache_size,
+ TrackerBusyCallback busy_callback,
+ gpointer busy_user_data,
+ const gchar *busy_operation,
+ GError **error)
+{
+ static GStaticMutex my_mutex = G_STATIC_MUTEX_INIT;
+ gboolean ret;
+
+ /* This lock actually only protects 'initialized', but the whole function
+ * is involved in setting it (as it's getting called recursively) */
+
+ g_static_mutex_lock (&my_mutex);
+
+ ret = tracker_data_manager_init_unlocked (flags,
+ test_schemas,
+ first_time,
+ journal_check,
+ select_cache_size,
+ update_cache_size,
+ busy_callback,
+ busy_user_data,
+ busy_operation,
+ error);
+
+ g_static_mutex_unlock (&my_mutex);
+
+ return ret;
+}
static void
@@ -4146,9 +4181,6 @@ tracker_data_manager_init_thread (GSimpleAsyncResult *result,
InitAsyncData *data;
gboolean result_b;
GError *internal_error = NULL;
- static GStaticMutex my_mutex = G_STATIC_MUTEX_INIT;
-
- g_static_mutex_lock (&my_mutex);
data = g_simple_async_result_get_op_res_gpointer (result);
@@ -4169,9 +4201,6 @@ tracker_data_manager_init_thread (GSimpleAsyncResult *result,
}
data->result = result_b;
-
- g_static_mutex_unlock (&my_mutex);
-
}
static void