summaryrefslogtreecommitdiff
path: root/libsoup/soup-message-io.c
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2008-03-18 23:08:05 +0000
committerDan Winship <danw@src.gnome.org>2008-03-18 23:08:05 +0000
commit10d4ed0d5d64d97a86730e42237bc7d8a2579bb2 (patch)
treea93a9ea43ee4ab4a85f5c10a51a4d7bf3227c773 /libsoup/soup-message-io.c
parent8e14f88e25192080ac237cb64be452c592c1e4fe (diff)
downloadlibsoup-10d4ed0d5d64d97a86730e42237bc7d8a2579bb2.tar.gz
if delaying the unpause to idle time, we need to keep track of the idle
* libsoup/soup-message-io.c (soup_message_io_unpause): if delaying the unpause to idle time, we need to keep track of the idle source (soup_message_io_stop): if the message is waiting to unpause itself, cancel that * libsoup/soup-server.c (soup_server_pause_message): call soup_message_io_pause(), not soup_message_io_unpause(). Duh. svn path=/trunk/; revision=1111
Diffstat (limited to 'libsoup/soup-message-io.c')
-rw-r--r--libsoup/soup-message-io.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/libsoup/soup-message-io.c b/libsoup/soup-message-io.c
index a10d37d4..2bc1fac2 100644
--- a/libsoup/soup-message-io.c
+++ b/libsoup/soup-message-io.c
@@ -62,6 +62,7 @@ typedef struct {
guint written;
guint read_tag, write_tag, err_tag;
+ GSource *unpause_source;
SoupMessageGetHeadersFn get_headers_cb;
SoupMessageParseHeadersFn parse_headers_cb;
@@ -139,6 +140,11 @@ soup_message_io_stop (SoupMessage *msg)
io->err_tag = 0;
}
+ if (io->unpause_source) {
+ g_source_destroy (io->unpause_source);
+ io->unpause_source = NULL;
+ }
+
if (io->read_state < SOUP_MESSAGE_IO_STATE_FINISHING)
soup_socket_disconnect (io->sock);
else if (io->conn) {
@@ -874,6 +880,7 @@ io_unpause_internal (gpointer msg)
SoupMessageIOData *io = priv->io_data;
g_return_val_if_fail (io != NULL, FALSE);
+ io->unpause_source = NULL;
if (io->write_tag || io->read_tag)
return FALSE;
@@ -910,9 +917,12 @@ soup_message_io_unpause (SoupMessage *msg)
SOUP_SOCKET_FLAG_NONBLOCKING, &non_blocking,
SOUP_SOCKET_ASYNC_CONTEXT, &async_context,
NULL);
- if (non_blocking)
- soup_add_idle (async_context, io_unpause_internal, msg);
- else
+ if (non_blocking) {
+ if (!io->unpause_source) {
+ io->unpause_source = soup_add_idle (
+ async_context, io_unpause_internal, msg);
+ }
+ } else
io_unpause_internal (msg);
if (async_context)
g_main_context_unref (async_context);