Justin Erenkrantz <jus...@erenkrantz.com> writes: > On Wed, Nov 5, 2014 at 9:24 AM, Philip Martin <phi...@codematters.co.uk> > wrote: >> Configure a server with both mod_ssl (HTTPS) and mod_deflate (HTTP >> compression). Start a checkout and the kill the server. The client >> goes into an infinite loop in libsvn_ra_serf/update.c:handle_fetch >> >> (gdb) n >> 1147 svn_txdelta_window_t delta_window = { 0 }; >> (gdb) n >> 1151 status = serf_bucket_read(response, 8000, &data, &len); >> (gdb) n >> 1152 if (SERF_BUCKET_READ_ERROR(status)) > > What's the status code from serf_bucket_read() on line 1151? I would > expect that the socket read should be generating a ECONNABORTED > somewhere? -- justin
handle_fetch (request=0x7ffff3e56038, response=0x7ffff3e918b8, handler_baton=0x7ffff3e611e0, pool=0x7ffff3e6d028) at ../src/subversion/libsvn_ra_serf/update.c:1152 1152 if (SERF_BUCKET_READ_ERROR(status)) (gdb) p status $13 = 0 At the lowest level there is an APR_EOF: 326 status = read_aggregate(bucket, requested, 1, &vec, &vecs_used); (gdb) s read_aggregate (bucket=0x7ffff3e92438, requested=8000, vecs_size=1, vecs=0x7fffffffd2b0, vecs_used=0x7fffffffd2ac) at buckets/aggregate_buckets.c:229 229 aggregate_context_t *ctx = bucket->data; (gdb) n 233 *vecs_used = 0; (gdb) 235 if (!ctx->list) { (gdb) 236 if (ctx->hold_open) { (gdb) 240 return APR_EOF; (gdb) In the deflate code this is ignored to "flush the zlib buffer": serf_deflate_read (bucket=0x7ffff3e924b8, requested=8000, data=0x7fffffffd430, len=0x7fffffffd428) at buckets/deflate_buckets.c:226 226 if (SERF_BUCKET_READ_ERROR(status)) { (gdb) p status $8 = 70014 (gdb) n 230 if (APR_STATUS_IS_EOF(status)) { (gdb) n 231 status = ctx->stream_status; (gdb) 232 if (APR_STATUS_IS_EOF(status)) { (gdb) p status $9 = 70014 (gdb) n 237 status = APR_SUCCESS; and later in the same function it's again ignored because the "inflation wasn't finished": 352 status = serf_bucket_read(ctx->inflate_stream, requested, data, (gdb) n 355 if (APR_STATUS_IS_EOF(status)) { (gdb) p status $10 = 70014 (gdb) n 356 status = ctx->stream_status; (gdb) 359 if (zRC != Z_STREAM_END) (gdb) 360 return APR_SUCCESS; -- Philip Martin | Subversion Committer WANdisco // *Non-Stop Data*