summaryrefslogtreecommitdiff
path: root/libsoup/soup-server.c
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-01-19 09:44:35 -0500
committerDan Winship <danw@gnome.org>2014-05-02 09:03:56 -0400
commit3ccb212449e7ac4f43888eee93366be934a87445 (patch)
treecb2a0547b0e1db180523d80e6158db33bbaa742b /libsoup/soup-server.c
parent93fa1c4b6afaf1cec0d241ccacc003d8fc531231 (diff)
downloadlibsoup-3ccb212449e7ac4f43888eee93366be934a87445.tar.gz
soup-message-io: slight tweak to callback/error handling
Let the callback know whether I/O completed on the message, and move the server-side "disconnect on I/O error" code from soup-message-io to soup-server.
Diffstat (limited to 'libsoup/soup-server.c')
-rw-r--r--libsoup/soup-server.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libsoup/soup-server.c b/libsoup/soup-server.c
index 07d801d1..18aefba5 100644
--- a/libsoup/soup-server.c
+++ b/libsoup/soup-server.c
@@ -870,20 +870,22 @@ soup_client_context_unref (SoupClientContext *client)
}
static void
-request_finished (SoupMessage *msg, gpointer user_data)
+request_finished (SoupMessage *msg, gboolean io_complete, gpointer user_data)
{
SoupClientContext *client = user_data;
SoupServer *server = client->server;
SoupSocket *sock = client->sock;
soup_message_finished (msg);
+
g_signal_emit (server,
- msg->status_code == SOUP_STATUS_IO_ERROR ?
+ (!io_complete || msg->status_code == SOUP_STATUS_IO_ERROR) ?
signals[REQUEST_ABORTED] : signals[REQUEST_FINISHED],
0, msg, client);
soup_client_context_cleanup (client);
- if (soup_socket_is_connected (sock) && soup_message_is_keepalive (msg)) {
+ if (io_complete && soup_socket_is_connected (sock) &&
+ soup_message_is_keepalive (msg)) {
/* Start a new request */
start_request (server, client);
} else {