summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Villar Senin <svillar@igalia.com>2011-09-16 17:08:08 +0200
committerSergio Villar Senin <svillar@igalia.com>2011-09-16 19:01:25 +0200
commit83aa1f285afa7232aaf3d2978d6b5eee23410781 (patch)
treefdb293b62f95a3a47978003d416d57a4522559e5
parent2d05a8d1e75599970a502819eb0cf32381b478f3 (diff)
downloadlibsoup-83aa1f285afa7232aaf3d2978d6b5eee23410781.tar.gz
soup-http-input-stream: read data from leftover buffers in finished messages
soup_http_input_stream_read(_async) allow clients to read pending data in leftover buffers even if the SoupMessage used by the stream is finished. https://bugzilla.gnome.org/show_bug.cgi?id=659256
-rw-r--r--libsoup/soup-http-input-stream.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/libsoup/soup-http-input-stream.c b/libsoup/soup-http-input-stream.c
index 82e7d469..6aa153d4 100644
--- a/libsoup/soup-http-input-stream.c
+++ b/libsoup/soup-http-input-stream.c
@@ -489,13 +489,13 @@ soup_http_input_stream_read (GInputStream *stream,
{
SoupHTTPInputStreamPrivate *priv = SOUP_HTTP_INPUT_STREAM_GET_PRIVATE (stream);
- if (priv->finished)
- return 0;
-
/* If there is data leftover from a previous read, return it. */
if (priv->leftover_bufsize)
return read_from_leftover (priv, buffer, count);
+ if (priv->finished)
+ return 0;
+
/* No leftover data, accept one chunk from the network */
soup_http_input_stream_prepare_for_io (stream, cancellable, buffer, count);
while (!priv->finished && priv->caller_nread == 0 &&
@@ -701,16 +701,16 @@ soup_http_input_stream_read_async (GInputStream *stream,
callback, user_data,
soup_http_input_stream_read_async);
- if (priv->finished) {
- g_simple_async_result_set_op_res_gssize (result, 0);
+ if (priv->leftover_bufsize) {
+ gsize nread = read_from_leftover (priv, buffer, count);
+ g_simple_async_result_set_op_res_gssize (result, nread);
g_simple_async_result_complete_in_idle (result);
g_object_unref (result);
return;
}
- if (priv->leftover_bufsize) {
- gsize nread = read_from_leftover (priv, buffer, count);
- g_simple_async_result_set_op_res_gssize (result, nread);
+ if (priv->finished) {
+ g_simple_async_result_set_op_res_gssize (result, 0);
g_simple_async_result_complete_in_idle (result);
g_object_unref (result);
return;