summaryrefslogtreecommitdiff
path: root/src/libtracker-sparql/direct/tracker-direct.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-11-18 01:44:56 +0100
committerCarlos Garnacho <carlosg@gnome.org>2020-11-26 13:29:26 +0100
commitb1e5becf444bdf2dbf6f09510d07e72647c3fd1e (patch)
tree7b1dc944e75b02f82abb5fa7f349d369f7f972cd /src/libtracker-sparql/direct/tracker-direct.c
parent860481e5c26acc3cd0c566d5a4a2897ebe89f156 (diff)
downloadtracker-b1e5becf444bdf2dbf6f09510d07e72647c3fd1e.tar.gz
libtracker-sparql/direct: Make task operation data more generic
Instead of containing strings, contain a generic pointer with a destroy notify function.
Diffstat (limited to 'src/libtracker-sparql/direct/tracker-direct.c')
-rw-r--r--src/libtracker-sparql/direct/tracker-direct.c45
1 files changed, 27 insertions, 18 deletions
diff --git a/src/libtracker-sparql/direct/tracker-direct.c b/src/libtracker-sparql/direct/tracker-direct.c
index 35346e44c..9e97f6a57 100644
--- a/src/libtracker-sparql/direct/tracker-direct.c
+++ b/src/libtracker-sparql/direct/tracker-direct.c
@@ -73,7 +73,8 @@ typedef enum {
typedef struct {
TaskType type;
- gchar *query;
+ gpointer data;
+ GDestroyNotify destroy;
} TaskData;
static void tracker_direct_connection_initable_iface_init (GInitableIface *iface);
@@ -90,22 +91,25 @@ G_DEFINE_TYPE_WITH_CODE (TrackerDirectConnection, tracker_direct_connection,
tracker_direct_connection_async_initable_iface_init))
static TaskData *
-task_data_query_new (TaskType type,
- const gchar *sparql)
+task_data_query_new (TaskType type,
+ gpointer data,
+ GDestroyNotify destroy)
{
- TaskData *data;
+ TaskData *task;
- data = g_new0 (TaskData, 1);
- data->type = type;
- data->query = g_strdup (sparql);
+ task = g_new0 (TaskData, 1);
+ task->type = type;
+ task->data = data;
+ task->destroy = destroy;
- return data;
+ return task;
}
static void
task_data_free (TaskData *task)
{
- g_free (task->query);
+ if (task->destroy && task->data)
+ task->destroy (task->data);
g_free (task);
}
@@ -131,7 +135,7 @@ cleanup_timeout_cb (gpointer user_data)
task = g_task_new (conn, NULL, NULL, NULL);
g_task_set_task_data (task,
- task_data_query_new (TASK_TYPE_RELEASE_MEMORY, NULL),
+ task_data_query_new (TASK_TYPE_RELEASE_MEMORY, NULL, NULL),
(GDestroyNotify) task_data_free);
g_thread_pool_push (priv->update_thread, task, NULL);
@@ -165,10 +169,10 @@ update_thread_func (gpointer data,
g_warning ("Queries don't go through this thread");
break;
case TASK_TYPE_UPDATE:
- tracker_data_update_sparql (tracker_data, task_data->query, &error);
+ tracker_data_update_sparql (tracker_data, task_data->data, &error);
break;
case TASK_TYPE_UPDATE_BLANK:
- retval = tracker_data_update_sparql_blank (tracker_data, task_data->query, &error);
+ retval = tracker_data_update_sparql_blank (tracker_data, task_data->data, &error);
destroy_notify = (GDestroyNotify) g_variant_unref;
break;
case TASK_TYPE_RELEASE_MEMORY:
@@ -217,7 +221,7 @@ query_thread_pool_func (gpointer data,
}
cursor = tracker_sparql_connection_query (TRACKER_SPARQL_CONNECTION (g_task_get_source_object (task)),
- task_data->query,
+ task_data->data,
g_task_get_cancellable (task),
&error);
if (cursor)
@@ -705,7 +709,9 @@ tracker_direct_connection_query_async (TrackerSparqlConnection *self,
task = g_task_new (self, cancellable, callback, user_data);
g_task_set_task_data (task,
- task_data_query_new (TASK_TYPE_QUERY, sparql),
+ task_data_query_new (TASK_TYPE_QUERY,
+ g_strdup (sparql),
+ g_free),
(GDestroyNotify) task_data_free);
if (!g_thread_pool_push (priv->select_pool, task, &error)) {
@@ -771,7 +777,9 @@ tracker_direct_connection_update_async (TrackerSparqlConnection *self,
task = g_task_new (self, cancellable, callback, user_data);
g_task_set_task_data (task,
- task_data_query_new (TASK_TYPE_UPDATE, sparql),
+ task_data_query_new (TASK_TYPE_UPDATE,
+ g_strdup (sparql),
+ g_free),
(GDestroyNotify) task_data_free);
g_thread_pool_push (priv->update_thread, task, NULL);
@@ -813,8 +821,7 @@ tracker_direct_connection_update_array_async (TrackerSparqlConnection *self,
concatenated = g_strjoinv ("\n", array_copy);
g_free (array_copy);
- task_data = task_data_query_new (TASK_TYPE_UPDATE, NULL);
- task_data->query = concatenated;
+ task_data = task_data_query_new (TASK_TYPE_UPDATE, concatenated, g_free);
task = g_task_new (self, cancellable, callback, user_data);
g_task_set_task_data (task, task_data,
@@ -880,7 +887,9 @@ tracker_direct_connection_update_blank_async (TrackerSparqlConnection *self,
task = g_task_new (self, cancellable, callback, user_data);
g_task_set_task_data (task,
- task_data_query_new (TASK_TYPE_UPDATE_BLANK, sparql),
+ task_data_query_new (TASK_TYPE_UPDATE_BLANK,
+ g_strdup (sparql),
+ g_free),
(GDestroyNotify) task_data_free);
g_thread_pool_push (priv->update_thread, task, NULL);