Author: rhuijben
Date: Wed Nov 11 14:46:37 2015
New Revision: 1713861
URL: http://svn.apache.org/viewvc?rev=1713861&view=rev
Log:
Following up on r1713852, tweak the deflate2 function to a function that is
called before the actual reading starts.
* buckets/deflate_buckets.c
(deflate_read2): Rename to...
(serf_deflate_wait_for_data): And start returning success when there is
something to read instead of calling deflate3.
(serf_deflate_read): Call serf_deflate_wait_for_data and when successfull
continue by calling deflate_read2.
Modified:
serf/trunk/buckets/deflate_buckets.c
Modified: serf/trunk/buckets/deflate_buckets.c
URL:
http://svn.apache.org/viewvc/serf/trunk/buckets/deflate_buckets.c?rev=1713861&r1=1713860&r2=1713861&view=diff
==============================================================================
--- serf/trunk/buckets/deflate_buckets.c (original)
+++ serf/trunk/buckets/deflate_buckets.c Wed Nov 11 14:46:37 2015
@@ -334,9 +334,7 @@ static apr_status_t deflate_read3(serf_b
return status;
}
-static apr_status_t deflate_read2(serf_bucket_t *bucket,
- apr_size_t requested,
- const char **data, apr_size_t *len)
+static apr_status_t serf_deflate_wait_for_data(serf_bucket_t *bucket)
{
deflate_context_t *ctx = bucket->data;
apr_status_t status;
@@ -369,12 +367,10 @@ static apr_status_t deflate_read2(serf_b
if (ctx->stream_left == 0) {
ctx->state++;
if (APR_STATUS_IS_EAGAIN(status)) {
- *len = 0;
return status;
}
}
else if (status) {
- *len = 0;
return status;
}
break;
@@ -440,10 +436,10 @@ static apr_status_t deflate_read2(serf_b
ctx->state++;
break;
case STATE_INFLATE:
- return deflate_read3(bucket, requested, data, len);
+ return APR_SUCCESS;
case STATE_DONE:
/* We're done inflating. Use our finished buffer. */
- return serf_bucket_read(ctx->stream, requested, data, len);
+ return ctx->inflate_stream ? APR_SUCCESS : APR_EOF;
default:
/* Not reachable */
return APR_EGENERAL;
@@ -457,7 +453,20 @@ static apr_status_t serf_deflate_read(se
apr_size_t requested,
const char **data, apr_size_t *len)
{
- return deflate_read2(bucket, requested, data, len);
+ deflate_context_t *ctx = bucket->data;
+ apr_status_t status;
+
+ status = serf_deflate_wait_for_data(bucket);
+ if (status || (ctx->state != STATE_INFLATE && ctx->state != STATE_DONE)) {
+ *data = "";
+ *len = 0;
+ return status;
+ }
+
+ if (ctx->state == STATE_INFLATE)
+ return deflate_read3(bucket, requested, data, len);
+ else
+ return serf_bucket_read(ctx->inflate_stream, requested, data, len);
}
static apr_status_t serf_deflate_set_config(serf_bucket_t *bucket,