diff options
Diffstat (limited to 'src/libtracker-direct/tracker-direct.c')
-rw-r--r-- | src/libtracker-direct/tracker-direct.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libtracker-direct/tracker-direct.c b/src/libtracker-direct/tracker-direct.c index 0155a1fcc..8527f9672 100644 --- a/src/libtracker-direct/tracker-direct.c +++ b/src/libtracker-direct/tracker-direct.c @@ -45,6 +45,7 @@ struct _TrackerDirectConnectionPrivate GList *notifiers; guint initialized : 1; + guint closing : 1; }; enum { @@ -148,12 +149,26 @@ static void query_thread_pool_func (gpointer data, gpointer user_data) { + TrackerDirectConnection *conn = user_data; + TrackerDirectConnectionPrivate *priv; TrackerSparqlCursor *cursor; GTask *task = data; TaskData *task_data = g_task_get_task_data (task); GError *error = NULL; g_assert (task_data->type == TASK_TYPE_QUERY); + + priv = tracker_direct_connection_get_instance_private (conn); + + if (priv->closing) { + g_task_return_new_error (task, + G_IO_ERROR, + G_IO_ERROR_CONNECTION_CLOSED, + "Connection is closed"); + g_object_unref (task); + return; + } + cursor = tracker_sparql_connection_query (TRACKER_SPARQL_CONNECTION (g_task_get_source_object (task)), task_data->query, g_task_get_cancellable (task), @@ -898,6 +913,7 @@ tracker_direct_connection_close (TrackerSparqlConnection *self) conn = TRACKER_DIRECT_CONNECTION (self); priv = tracker_direct_connection_get_instance_private (conn); + priv->closing = TRUE; if (priv->update_thread) { g_thread_pool_free (priv->update_thread, TRUE, TRUE); |