SoupSession: set the connection to IDLE on unqueuing SoupMessages
authorSergio Villar Senin <svillar@igalia.com>
Mon, 26 Sep 2011 17:09:31 +0000 (19:09 +0200)
committerDan Winship <danw@gnome.org>
Thu, 29 Sep 2011 14:36:25 +0000 (10:36 -0400)
Connection should be set to IDLE state only after being 100% sure that is
not going to be reused by the current owner.

Also, fix a bug in SoupSessionSync revealed by this change.

https://bugzilla.gnome.org/show_bug.cgi?id=651146

libsoup/soup-message-io.c
libsoup/soup-session-sync.c
libsoup/soup-session.c

index 59b75d8..a489788 100644 (file)
@@ -144,8 +144,6 @@ soup_message_io_stop (SoupMessage *msg)
 
        if (io->read_state < SOUP_MESSAGE_IO_STATE_FINISHING)
                soup_socket_disconnect (io->sock);
-       else if (io->item && io->item->conn)
-               soup_connection_set_state (io->item->conn, SOUP_CONNECTION_IDLE);
 }
 
 #define SOUP_MESSAGE_IO_EOL            "\r\n"
index aecbf6f..7bd76ea 100644 (file)
@@ -155,7 +155,7 @@ tunnel_connect (SoupSession *session, SoupMessageQueueItem *related)
                soup_session_send_queue_item (session, item, NULL);
                status = item->msg->status_code;
                if (item->state == SOUP_MESSAGE_RESTARTING &&
-                   soup_connection_get_state (conn) != SOUP_CONNECTION_DISCONNECTED) {
+                   soup_message_io_in_progress (item->msg)) {
                        item->state = SOUP_MESSAGE_STARTING;
                        soup_message_restarted (item->msg);
                } else {
index aa57d12..cd4bbdd 100644 (file)
@@ -1499,6 +1499,7 @@ soup_session_unqueue_item (SoupSession          *session,
        SoupSessionHost *host;
 
        if (item->conn) {
+               soup_connection_set_state (item->conn, SOUP_CONNECTION_IDLE);
                g_object_unref (item->conn);
                item->conn = NULL;
        }