[libsoup/carlosgc/io-data-ownership: 9/9] Remove SoupMessageQueueItem connection member
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup/carlosgc/io-data-ownership: 9/9] Remove SoupMessageQueueItem connection member
- Date: Tue, 27 Apr 2021 08:18:52 +0000 (UTC)
commit 6d5d6dfdce7099b876e5624468d334d31e9cbbf1
Author: Carlos Garcia Campos <cgarcia igalia com>
Date: Tue Apr 27 09:46:10 2021 +0200
Remove SoupMessageQueueItem connection member
A queue item always has a message that already takes a weak reference of
the connection. We don't need to keep a strong reference in the queue
item too, we can just get the connection from the message.
libsoup/soup-connection.c | 2 +
libsoup/soup-message-io.c | 17 ++++-----
libsoup/soup-message-queue-item.c | 2 +-
libsoup/soup-message-queue-item.h | 1 -
libsoup/soup-session.c | 80 +++++++++++++++++++--------------------
5 files changed, 50 insertions(+), 52 deletions(-)
---
diff --git a/libsoup/soup-connection.c b/libsoup/soup-connection.c
index 3e52da6d..2049165a 100644
--- a/libsoup/soup-connection.c
+++ b/libsoup/soup-connection.c
@@ -984,6 +984,7 @@ soup_connection_set_state (SoupConnection *conn, SoupConnectionState state)
g_return_if_fail (state >= SOUP_CONNECTION_NEW &&
state <= SOUP_CONNECTION_DISCONNECTED);
+ g_object_ref (conn);
g_object_freeze_notify (G_OBJECT (conn));
priv = soup_connection_get_instance_private (conn);
@@ -1007,6 +1008,7 @@ soup_connection_set_state (SoupConnection *conn, SoupConnectionState state)
}
g_object_thaw_notify (G_OBJECT (conn));
+ g_object_unref (conn);
}
void
diff --git a/libsoup/soup-message-io.c b/libsoup/soup-message-io.c
index 4fdb5b4d..8263d2ff 100644
--- a/libsoup/soup-message-io.c
+++ b/libsoup/soup-message-io.c
@@ -84,7 +84,7 @@ soup_client_message_io_finished (SoupClientMessageIOData *io)
completion = SOUP_MESSAGE_IO_INTERRUPTED;
msg = g_object_ref (io->item->msg);
- soup_connection_message_io_finished (io->item->conn, msg);
+ soup_connection_message_io_finished (soup_message_get_connection (msg), msg);
if (completion_cb)
completion_cb (G_OBJECT (msg), completion, completion_data);
g_object_unref (msg);
@@ -101,7 +101,7 @@ soup_client_message_io_stolen (SoupClientMessageIOData *io)
completion_data = io->base.completion_data;
msg = g_object_ref (io->item->msg);
- soup_connection_message_io_finished (io->item->conn, msg);
+ soup_connection_message_io_finished (soup_message_get_connection (msg), msg);
if (completion_cb)
completion_cb (G_OBJECT (msg), SOUP_MESSAGE_IO_STOLEN, completion_data);
g_object_unref (msg);
@@ -260,10 +260,9 @@ closed_async (GObject *source,
*/
static void
-write_headers (SoupMessage *msg,
- GString *header,
- SoupConnection *conn,
- SoupEncoding *encoding)
+write_headers (SoupMessage *msg,
+ GString *header,
+ SoupEncoding *encoding)
{
GUri *uri = soup_message_get_uri (msg);
char *uri_string;
@@ -277,7 +276,7 @@ write_headers (SoupMessage *msg,
uri_string = g_strdup_printf ("%s:%d", uri_host, g_uri_get_port (uri));
g_free (uri_host);
} else {
- gboolean proxy = soup_connection_is_via_proxy (conn);
+ gboolean proxy = soup_connection_is_via_proxy (soup_message_get_connection (msg));
/* Proxy expects full URI to destination. Otherwise
* just the path.
@@ -339,7 +338,7 @@ io_write (SoupMessage *msg, gboolean blocking,
switch (io->write_state) {
case SOUP_MESSAGE_IO_STATE_HEADERS:
if (!io->write_buf->len)
- write_headers (msg, io->write_buf, client_io->item->conn, &io->write_encoding);
+ write_headers (msg, io->write_buf, &io->write_encoding);
while (io->written < io->write_buf->len) {
nwrote = g_pollable_stream_write (io->ostream,
@@ -707,7 +706,7 @@ request_is_restartable (SoupMessage *msg, GError *error)
return (io->read_state <= SOUP_MESSAGE_IO_STATE_HEADERS &&
io->read_header_buf->len == 0 &&
- soup_connection_get_ever_used (client_io->item->conn) &&
+ soup_connection_get_ever_used (soup_message_get_connection (client_io->item->msg)) &&
!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_TIMED_OUT) &&
!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK) &&
!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) &&
diff --git a/libsoup/soup-message-queue-item.c b/libsoup/soup-message-queue-item.c
index aefc5cf8..71c77054 100644
--- a/libsoup/soup-message-queue-item.c
+++ b/libsoup/soup-message-queue-item.c
@@ -45,7 +45,7 @@ soup_message_queue_item_ref (SoupMessageQueueItem *item)
static void
soup_message_queue_item_destroy (SoupMessageQueueItem *item)
{
- g_warn_if_fail (item->conn == NULL);
+ g_warn_if_fail (soup_message_get_connection (item->msg) == NULL);
g_signal_handlers_disconnect_by_data (item->msg, item->cancellable);
diff --git a/libsoup/soup-message-queue-item.h b/libsoup/soup-message-queue-item.h
index 754c022e..f7d72ccb 100644
--- a/libsoup/soup-message-queue-item.h
+++ b/libsoup/soup-message-queue-item.h
@@ -32,7 +32,6 @@ struct _SoupMessageQueueItem {
GCancellable *cancellable;
GError *error;
- SoupConnection *conn;
GTask *task;
guint paused : 1;
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 34d11c5f..5e1989f9 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -1122,7 +1122,7 @@ static int
lookup_connection (SoupMessageQueueItem *item,
SoupConnection *conn)
{
- return item->conn == conn ? 0 : 1;
+ return soup_message_get_connection (item->msg) == conn ? 0 : 1;
}
static SoupMessageQueueItem *
@@ -1296,27 +1296,19 @@ redirect_handler (SoupMessage *msg,
soup_session_redirect_message (session, msg, &item->error);
}
-static void
-soup_session_set_item_connection (SoupSession *session,
- SoupMessageQueueItem *item,
- SoupConnection *conn)
-{
- g_clear_object (&item->conn);
- item->conn = conn ? g_object_ref (conn) : NULL;
- soup_message_set_connection (item->msg, conn);
-}
-
static void
message_restarted (SoupMessage *msg, gpointer user_data)
{
SoupMessageQueueItem *item = user_data;
+ SoupConnection *conn;
- if (item->conn &&
+ conn = soup_message_get_connection (item->msg);
+ if (conn &&
(!soup_message_is_keepalive (msg) ||
SOUP_STATUS_IS_REDIRECTION (soup_message_get_status (msg)))) {
- if (soup_connection_get_state (item->conn) == SOUP_CONNECTION_IN_USE)
- soup_connection_set_state (item->conn, SOUP_CONNECTION_IDLE);
- soup_session_set_item_connection (item->session, item, NULL);
+ if (soup_connection_get_state (conn) == SOUP_CONNECTION_IN_USE)
+ soup_connection_set_state (conn, SOUP_CONNECTION_IDLE);
+ soup_message_set_connection (item->msg, NULL);
}
soup_message_cleanup_response (msg);
@@ -1548,12 +1540,14 @@ soup_session_unqueue_item (SoupSession *session,
SoupSessionPrivate *priv = soup_session_get_instance_private (session);
SoupSessionHost *host;
GSList *f;
+ SoupConnection *conn;
- if (item->conn) {
+ conn = soup_message_get_connection (item->msg);
+ if (conn) {
if (soup_message_get_method (item->msg) != SOUP_METHOD_CONNECT ||
!SOUP_STATUS_IS_SUCCESSFUL (soup_message_get_status (item->msg)))
- soup_connection_set_state (item->conn, SOUP_CONNECTION_IDLE);
- soup_session_set_item_connection (session, item, NULL);
+ soup_connection_set_state (conn, SOUP_CONNECTION_IDLE);
+ soup_message_set_connection (item->msg, NULL);
}
if (item->state != SOUP_MESSAGE_FINISHED) {
@@ -1622,8 +1616,8 @@ tunnel_complete (SoupMessageQueueItem *tunnel_item,
item->error = error;
if (!SOUP_STATUS_IS_SUCCESSFUL (status) || item->error) {
- soup_connection_disconnect (item->conn);
- soup_session_set_item_connection (session, item, NULL);
+ soup_connection_disconnect (soup_message_get_connection (item->msg));
+ soup_message_set_connection (item->msg, NULL);
if (!error && soup_message_get_status (item->msg) == SOUP_STATUS_NONE)
soup_message_set_status (item->msg, status, NULL);
}
@@ -1655,7 +1649,7 @@ tunnel_message_completed (SoupMessage *msg, SoupMessageIOCompletion completion,
if (tunnel_item->state == SOUP_MESSAGE_RESTARTING) {
soup_message_restarted (msg);
- if (tunnel_item->conn) {
+ if (soup_message_get_connection (tunnel_item->msg)) {
tunnel_item->state = SOUP_MESSAGE_RUNNING;
soup_session_send_queue_item (session, tunnel_item,
(SoupMessageIOCompletionFn)tunnel_message_completed);
@@ -1676,7 +1670,7 @@ tunnel_message_completed (SoupMessage *msg, SoupMessageIOCompletion completion,
}
if (tunnel_item->async) {
- soup_connection_tunnel_handshake_async (item->conn,
+ soup_connection_tunnel_handshake_async (soup_message_get_connection (item->msg),
item->io_priority,
item->cancellable,
(GAsyncReadyCallback)tunnel_handshake_complete,
@@ -1684,7 +1678,7 @@ tunnel_message_completed (SoupMessage *msg, SoupMessageIOCompletion completion,
} else {
GError *error = NULL;
- soup_connection_tunnel_handshake (item->conn, item->cancellable, &error);
+ soup_connection_tunnel_handshake (soup_message_get_connection (item->msg), item->cancellable,
&error);
tunnel_complete (tunnel_item, SOUP_STATUS_OK, error);
}
}
@@ -1706,7 +1700,7 @@ tunnel_connect (SoupMessageQueueItem *item)
item->cancellable);
tunnel_item->io_priority = item->io_priority;
tunnel_item->related = soup_message_queue_item_ref (item);
- soup_session_set_item_connection (session, tunnel_item, item->conn);
+ soup_message_set_connection (tunnel_item->msg, soup_message_get_connection (item->msg));
tunnel_item->state = SOUP_MESSAGE_RUNNING;
soup_session_send_queue_item (session, tunnel_item,
@@ -1718,8 +1712,6 @@ tunnel_connect (SoupMessageQueueItem *item)
static void
connect_complete (SoupMessageQueueItem *item, SoupConnection *conn, GError *error)
{
- SoupSession *session = item->session;
-
if (!error) {
item->state = SOUP_MESSAGE_CONNECTED;
return;
@@ -1730,7 +1722,7 @@ connect_complete (SoupMessageQueueItem *item, SoupConnection *conn, GError *erro
item->error = error;
soup_connection_disconnect (conn);
if (item->state == SOUP_MESSAGE_CONNECTING) {
- soup_session_set_item_connection (session, item, NULL);
+ soup_message_set_connection (item->msg, NULL);
item->state = SOUP_MESSAGE_READY;
}
}
@@ -1787,7 +1779,7 @@ steal_preconnection (SoupSession *session,
if (!preconnect_item->connect_only || preconnect_item->state != SOUP_MESSAGE_CONNECTING)
return FALSE;
- soup_session_set_item_connection (session, preconnect_item, NULL);
+ soup_message_set_connection (preconnect_item->msg, NULL);
g_assert (preconnect_item->related == NULL);
preconnect_item->related = soup_message_queue_item_ref (item);
@@ -1810,9 +1802,10 @@ get_connection_for_host (SoupSession *session,
if (priv->disposed)
return NULL;
- if (item->conn) {
- g_return_val_if_fail (soup_connection_get_state (item->conn) != SOUP_CONNECTION_DISCONNECTED,
FALSE);
- return item->conn;
+ conn = soup_message_get_connection (item->msg);
+ if (conn) {
+ g_return_val_if_fail (soup_connection_get_state (conn) != SOUP_CONNECTION_DISCONNECTED,
FALSE);
+ return conn;
}
for (conns = host->connections; conns; conns = conns->next) {
@@ -1932,9 +1925,9 @@ get_connection (SoupMessageQueueItem *item, gboolean *should_cleanup)
return FALSE;
}
- soup_session_set_item_connection (session, item, conn);
+ soup_message_set_connection (item->msg, conn);
- switch (soup_connection_get_state (item->conn)) {
+ switch (soup_connection_get_state (conn)) {
case SOUP_CONNECTION_IN_USE:
item->state = SOUP_MESSAGE_READY;
return TRUE;
@@ -1952,7 +1945,7 @@ get_connection (SoupMessageQueueItem *item, gboolean *should_cleanup)
item->state = SOUP_MESSAGE_CONNECTING;
if (item->async) {
- soup_connection_connect_async (item->conn,
+ soup_connection_connect_async (conn,
item->io_priority,
item->cancellable,
connect_async_complete,
@@ -1961,7 +1954,7 @@ get_connection (SoupMessageQueueItem *item, gboolean *should_cleanup)
} else {
GError *error = NULL;
- soup_connection_connect (item->conn, item->cancellable, &error);
+ soup_connection_connect (conn, item->cancellable, &error);
connect_complete (item, conn, error);
return TRUE;
@@ -1987,7 +1980,7 @@ soup_session_process_queue_item (SoupSession *session,
break;
case SOUP_MESSAGE_CONNECTED:
- if (soup_connection_is_tunnelled (item->conn))
+ if (soup_connection_is_tunnelled (soup_message_get_connection (item->msg)))
tunnel_connect (item);
else
item->state = SOUP_MESSAGE_READY;
@@ -3618,13 +3611,13 @@ steal_connection (SoupSession *session,
SoupSessionHost *host;
GIOStream *stream;
- conn = g_object_ref (item->conn);
+ conn = g_object_ref (soup_message_get_connection (item->msg));
host = get_host_for_message (session, item->msg);
g_hash_table_remove (priv->conns, conn);
drop_connection (session, host, conn);
stream = soup_connection_steal_iostream (conn);
- soup_session_set_item_connection (session, item, NULL);
+ soup_message_set_connection (item->msg, NULL);
g_object_unref (conn);
return stream;
@@ -3656,12 +3649,14 @@ soup_session_steal_connection (SoupSession *session,
{
SoupMessageQueueItem *item;
GIOStream *stream = NULL;
+ SoupConnection *conn;
item = soup_session_lookup_queue_item (session, msg);
if (!item)
return NULL;
- if (item->conn && soup_connection_get_state (item->conn) == SOUP_CONNECTION_IN_USE)
+ conn = soup_message_get_connection (item->msg);
+ if (conn && soup_connection_get_state (conn) == SOUP_CONNECTION_IN_USE)
stream = steal_connection (session, item);
return stream;
@@ -3864,8 +3859,11 @@ preconnect_async_complete (SoupMessage *msg,
if (item->error) {
g_task_return_error (task, g_error_copy (item->error));
} else {
- if (item->conn)
- soup_connection_set_reusable (item->conn, TRUE);
+ SoupConnection *conn;
+
+ conn = soup_message_get_connection (item->msg);
+ if (conn)
+ soup_connection_set_reusable (conn, TRUE);
g_task_return_boolean (task, TRUE);
}
g_object_unref (task);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]