if (item->state == SOUP_MESSAGE_RESTARTING) {
soup_message_restarted (msg);
if (item->conn) {
+ item->state = SOUP_MESSAGE_RUNNING;
soup_session_send_queue_item (session, item, tunnel_message_completed);
return;
}
status = item->msg->status_code;
if (item->state == SOUP_MESSAGE_RESTARTING &&
soup_message_io_in_progress (item->msg)) {
- item->state = SOUP_MESSAGE_STARTING;
soup_message_restarted (item->msg);
+ item->state = SOUP_MESSAGE_RUNNING;
} else {
if (item->state == SOUP_MESSAGE_RESTARTING)
status = SOUP_STATUS_TRY_AGAIN;
g_signal_emit (session, signals[REQUEST_STARTED], 0,
item->msg, soup_connection_get_socket (item->conn));
- soup_connection_send_request (item->conn, item, completion_cb, item);
+ if (item->state == SOUP_MESSAGE_RUNNING)
+ soup_connection_send_request (item->conn, item, completion_cb, item);
}
gboolean
item = soup_message_queue_lookup (priv->queue, msg);
soup_message_queue_item_set_connection (item, conn);
g_object_unref (msg);
+ item->state = SOUP_MESSAGE_RUNNING;
g_signal_emit (session, signals[TUNNELING], 0, conn);
return item;
}
static void
+ea_request_started (SoupSession *session, SoupMessage *msg, SoupSocket *socket, gpointer user_data)
+{
+ soup_session_cancel_message (session, msg, SOUP_STATUS_CANCELLED);
+}
+
+static void
do_early_abort_test (void)
{
SoupSession *session;
g_main_context_iteration (context, FALSE);
soup_test_session_abort_unref (session);
+
+ session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC, NULL);
+ msg = soup_message_new_from_uri ("GET", base_uri);
+
+ g_signal_connect (session, "request-started",
+ G_CALLBACK (ea_request_started), NULL);
+ soup_session_send_message (session, msg);
+ debug_printf (2, " Message 3 completed\n");
+
+ if (msg->status_code != SOUP_STATUS_CANCELLED) {
+ debug_printf (1, " Unexpected response: %d %s\n",
+ msg->status_code, msg->reason_phrase);
+ errors++;
+ }
+ g_object_unref (msg);
+
+ while (g_main_context_pending (context))
+ g_main_context_iteration (context, FALSE);
+
+ soup_test_session_abort_unref (session);
}
static void