summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2022-10-26 10:05:43 +0000
committerCarlos Garnacho <carlosg@gnome.org>2022-10-26 10:05:43 +0000
commite45d6886b1fb620be630945494052190c133a9d1 (patch)
tree57d097b7862b37c04366c28d5767c8835c069ef8
parentb729f671a2e5f0a46d3107db55f4dfcfb4246ca6 (diff)
parent8caded76418d6e87d70699197784fef0a6a36c32 (diff)
downloadtracker-e45d6886b1fb620be630945494052190c133a9d1.tar.gz
Merge branch 'wip/carlosg/bus-cancellation' into 'master'
Fixes to bus cursor cancellation Closes #383 See merge request https://gitlab.gnome.org/GNOME/tracker/-/merge_requests/547
-rw-r--r--src/libtracker-sparql/bus/tracker-bus-cursor.c13
-rw-r--r--src/libtracker-sparql/tracker-endpoint-dbus.c29
2 files changed, 25 insertions, 17 deletions
diff --git a/src/libtracker-sparql/bus/tracker-bus-cursor.c b/src/libtracker-sparql/bus/tracker-bus-cursor.c
index ee0a08547..2b463299c 100644
--- a/src/libtracker-sparql/bus/tracker-bus-cursor.c
+++ b/src/libtracker-sparql/bus/tracker-bus-cursor.c
@@ -225,7 +225,7 @@ tracker_bus_cursor_next (TrackerSparqlCursor *cursor,
* columns x 4 bytes for offsets]
*/
n_columns = g_data_input_stream_read_int32 (bus_cursor->data_stream,
- NULL, NULL);
+ cancellable, NULL);
if (n_columns == 0) {
bus_cursor->finished = TRUE;
@@ -236,16 +236,16 @@ tracker_bus_cursor_next (TrackerSparqlCursor *cursor,
bus_cursor->types = g_new0 (TrackerSparqlValueType, n_columns);
if (!g_input_stream_read_all (G_INPUT_STREAM (bus_cursor->data_stream),
- bus_cursor->types,
- n_columns * sizeof (gint32),
- NULL, NULL, error))
+ bus_cursor->types,
+ n_columns * sizeof (gint32),
+ NULL, cancellable, error))
return FALSE;
offsets = g_new0 (gint32, n_columns);
if (!g_input_stream_read_all (G_INPUT_STREAM (bus_cursor->data_stream),
offsets,
n_columns * sizeof (gint32),
- NULL, NULL, error)) {
+ NULL, cancellable, error)) {
g_free (offsets);
return FALSE;
}
@@ -278,7 +278,7 @@ tracker_bus_cursor_next (TrackerSparqlCursor *cursor,
if (!g_input_stream_read_all (G_INPUT_STREAM (bus_cursor->data_stream),
bus_cursor->row_data,
offsets[n_columns - 1] + 1,
- NULL, NULL, error)) {
+ NULL, cancellable, error)) {
g_free (offsets);
return FALSE;
}
@@ -325,6 +325,7 @@ tracker_bus_cursor_next_async (TrackerSparqlCursor *cursor,
task = g_task_new (cursor, cancellable, cb, user_data);
g_task_run_in_thread (task, next_in_thread);
+ g_object_unref (task);
}
static gboolean
diff --git a/src/libtracker-sparql/tracker-endpoint-dbus.c b/src/libtracker-sparql/tracker-endpoint-dbus.c
index 8ee65a3f4..4bc486c76 100644
--- a/src/libtracker-sparql/tracker-endpoint-dbus.c
+++ b/src/libtracker-sparql/tracker-endpoint-dbus.c
@@ -374,7 +374,8 @@ write_cursor (QueryRequest *request,
glong cur_offset = -1;
if (!g_data_output_stream_put_int32 (request->data_stream, n_columns,
- NULL, &inner_error))
+ request->cancellable,
+ &inner_error))
break;
for (i = 0; i < n_columns; i++) {
@@ -382,7 +383,8 @@ write_cursor (QueryRequest *request,
if (!g_data_output_stream_put_int32 (request->data_stream,
tracker_sparql_cursor_get_value_type (cursor, i),
- NULL, &inner_error))
+ request->cancellable,
+ &inner_error))
goto out;
values[i] = tracker_sparql_cursor_get_string (cursor, i, &len);
@@ -393,17 +395,21 @@ write_cursor (QueryRequest *request,
for (i = 0; i < n_columns; i++) {
if (!g_data_output_stream_put_int32 (request->data_stream,
- offsets[i], NULL, &inner_error))
+ offsets[i],
+ request->cancellable,
+ &inner_error))
goto out;
}
for (i = 0; i < n_columns; i++) {
if (!g_data_output_stream_put_string (request->data_stream,
values[i] ? values[i] : "",
- NULL, &inner_error))
+ request->cancellable,
+ &inner_error))
goto out;
- if (!g_data_output_stream_put_byte (request->data_stream, 0, NULL,
+ if (!g_data_output_stream_put_byte (request->data_stream, 0,
+ request->cancellable,
&inner_error))
goto out;
}
@@ -431,7 +437,8 @@ handle_cursor_reply (GTask *task,
TrackerSparqlCursor *cursor = source_object;
QueryRequest *request = task_data;
const gchar **variable_names = NULL;
- GError *write_error = NULL;
+ GError *error = NULL;
+ gboolean retval;
gint i, n_columns;
n_columns = tracker_sparql_cursor_get_n_columns (cursor);
@@ -441,15 +448,15 @@ handle_cursor_reply (GTask *task,
g_dbus_method_invocation_return_value (request->invocation, g_variant_new ("(^as)", variable_names));
- if (!write_cursor (request, cursor, &write_error) &&
- !g_error_matches (write_error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_warning ("Endpoint failed to fully write cursor: %s\n", write_error->message);
+ retval = write_cursor (request, cursor, &error);
g_free (variable_names);
- g_clear_error (&write_error);
tracker_sparql_cursor_close (cursor);
- g_task_return_boolean (task, TRUE);
+ if (error)
+ g_task_return_error (task, error);
+ else
+ g_task_return_boolean (task, retval);
}
static void