summaryrefslogtreecommitdiff
path: root/libsoup
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2023-04-08 09:15:59 +0200
committerCarlos Garcia Campos <cgarcia@igalia.com>2023-04-08 09:15:59 +0200
commit517eb93f33e3d5dcf7ba059608114fc9e36b62af (patch)
treec308ac3c55b09b7f0782d977ec2e3e5ee0bdd6e7 /libsoup
parentc9123033837b76c2d24e3caeef461fcd4df0b23e (diff)
downloadlibsoup-517eb93f33e3d5dcf7ba059608114fc9e36b62af.tar.gz
session: handle request cancellation earlier
Check if the message was cancelled on every queue state loop iteration.
Diffstat (limited to 'libsoup')
-rw-r--r--libsoup/soup-session.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 4d4c8654..5acf60a8 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -1740,6 +1740,9 @@ soup_session_process_queue_item (SoupSession *session,
if (item->paused)
return;
+ if (item->state != SOUP_MESSAGE_FINISHING && g_cancellable_is_cancelled (item->cancellable))
+ item->state = SOUP_MESSAGE_FINISHING;
+
switch (item->state) {
case SOUP_MESSAGE_STARTING:
if (!soup_session_ensure_item_connection (session, item))
@@ -2907,7 +2910,8 @@ conditional_get_ready_cb (SoupSession *session,
stream = soup_session_send_finish (session, result, &error);
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
soup_cache_cancel_conditional_request (data->cache, data->conditional_msg);
- cancel_cache_response (data->item);
+ if (data->item->state != SOUP_MESSAGE_FINISHED)
+ cancel_cache_response (data->item);
async_cache_conditional_data_free (data);
return;
}