diff options
| author | Dan Winship <danw@src.gnome.org> | 2008-03-18 23:08:05 +0000 |
|---|---|---|
| committer | Dan Winship <danw@src.gnome.org> | 2008-03-18 23:08:05 +0000 |
| commit | 10d4ed0d5d64d97a86730e42237bc7d8a2579bb2 (patch) | |
| tree | a93a9ea43ee4ab4a85f5c10a51a4d7bf3227c773 /libsoup/soup-message-io.c | |
| parent | 8e14f88e25192080ac237cb64be452c592c1e4fe (diff) | |
| download | libsoup-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.c | 16 |
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); |
