Author: rhuijben
Date: Thu Nov 19 17:37:57 2015
New Revision: 1715222
URL: http://svn.apache.org/viewvc?rev=1715222&view=rev
Log:
Improve compatibility of http/2 response handling with the legacy handling
a bit to fix some Subversion usecases.
* protocols/http2_stream.c
(serf_http2__stream_processor): Keep calling serf__handle_response() until
we get some not success result.
Modified:
serf/trunk/protocols/http2_stream.c
Modified: serf/trunk/protocols/http2_stream.c
URL:
http://svn.apache.org/viewvc/serf/trunk/protocols/http2_stream.c?rev=1715222&r1=1715221&r2=1715222&view=diff
==============================================================================
--- serf/trunk/protocols/http2_stream.c (original)
+++ serf/trunk/protocols/http2_stream.c Thu Nov 19 17:37:57 2015
@@ -697,7 +697,17 @@ serf_http2__stream_processor(void *baton
SERF_H2_assert(request->resp_bkt != NULL);
- status = serf__handle_response(request, request->respool);
+ /* Response handlers are expected to read until they get some error,
+ but at least some implementations assume that just returning
+ APR_SUCCESS will have them called again, as that used to work as
+ an APR_EAGAIN like system in HTTP/1.
+
+ But we can't just fall back with HTTP/2, as we might still have
+ some part of the frame open (good case), or we might have completed
+ the frame and are never called again. */
+ do {
+ status = serf__handle_response(request, request->respool);
+ } while (status == APR_SUCCESS);
if (!APR_STATUS_IS_EOF(status)
&& !SERF_BUCKET_READ_ERROR(status))