summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2022-10-24 15:21:00 +0200
committerCarlos Garnacho <carlosg@gnome.org>2022-10-24 15:30:14 +0200
commit1e9f1b5c8ca46a9ea04632eab93a931877237759 (patch)
treef8748eb3a161045ac6913f7765bcf97040123846
parentd5a52c12009c26491845774dee7bfbfd41d9ffaa (diff)
downloadtracker-1e9f1b5c8ca46a9ea04632eab93a931877237759.tar.gz
libtracker-sparql/direct: Plug possible leaks on statement cancellation
Unref the task consistently after g_task_run_in_thread(), so it is properly disposed after the callback finishes execution. This avoids these callbacks from having to free the task on each return path, which they didn't.
-rw-r--r--src/libtracker-sparql/direct/tracker-direct-statement.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/libtracker-sparql/direct/tracker-direct-statement.c b/src/libtracker-sparql/direct/tracker-direct-statement.c
index 8ff95c8fb..20ac22a4b 100644
--- a/src/libtracker-sparql/direct/tracker-direct-statement.c
+++ b/src/libtracker-sparql/direct/tracker-direct-statement.c
@@ -197,8 +197,6 @@ execute_in_thread (GTask *task,
g_task_return_error (task, error);
else
g_task_return_pointer (task, cursor, g_object_unref);
-
- g_object_unref (task);
}
static void
@@ -264,8 +262,6 @@ serialize_in_thread (GTask *task,
g_task_return_pointer (task, istream, g_object_unref);
else
g_task_return_error (task, error);
-
- g_object_unref (task);
}
static void
@@ -322,6 +318,7 @@ tracker_direct_statement_execute_async (TrackerSparqlStatement *stmt,
task = g_task_new (stmt, cancellable, callback, user_data);
g_task_set_task_data (task, values, (GDestroyNotify) g_hash_table_unref);
g_task_run_in_thread (task, execute_in_thread);
+ g_object_unref (task);
}
static TrackerSparqlCursor *
@@ -365,6 +362,7 @@ tracker_direct_statement_serialize_async (TrackerSparqlStatement *stmt,
task = g_task_new (stmt, cancellable, callback, user_data);
g_task_set_task_data (task, data, (GDestroyNotify) rdf_serialization_data_free);
g_task_run_in_thread (task, serialize_in_thread);
+ g_object_unref (task);
}
static GInputStream *