diff options
author | Sergio Villar Senin <svillar@igalia.com> | 2011-09-16 17:08:08 +0200 |
---|---|---|
committer | Sergio Villar Senin <svillar@igalia.com> | 2011-09-16 19:01:25 +0200 |
commit | 83aa1f285afa7232aaf3d2978d6b5eee23410781 (patch) | |
tree | fdb293b62f95a3a47978003d416d57a4522559e5 | |
parent | 2d05a8d1e75599970a502819eb0cf32381b478f3 (diff) | |
download | libsoup-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.c | 16 |
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; |