Browse Source

patch curl with EOF fix

From: http://curl.haxx.se/mail/archive-2014-09/0018.html
Brad Fitzpatrick 11 years ago
parent
commit
5b7b6a37bc
2 changed files with 35 additions and 0 deletions
  1. 2 0
      Dockerfile
  2. 33 0
      testdata/curl-http2-eof.patch

+ 2 - 0
Dockerfile

@@ -22,6 +22,8 @@ WORKDIR /root
 RUN wget http://curl.haxx.se/download/curl-7.38.0.tar.gz
 RUN wget http://curl.haxx.se/download/curl-7.38.0.tar.gz
 RUN tar -zxvf curl-7.38.0.tar.gz
 RUN tar -zxvf curl-7.38.0.tar.gz
 WORKDIR /root/curl-7.38.0
 WORKDIR /root/curl-7.38.0
+ADD testdata/curl-http2-eof.patch /tmp/curl-http2-eof.patch
+RUN patch -p1 < /tmp/curl-http2-eof.patch
 RUN ./configure --with-ssl --with-nghttp2=/usr/local
 RUN ./configure --with-ssl --with-nghttp2=/usr/local
 RUN make
 RUN make
 RUN make install
 RUN make install

+ 33 - 0
testdata/curl-http2-eof.patch

@@ -0,0 +1,33 @@
+From c7de3617464f935f6bab113b4da1bb91253baa7e Mon Sep 17 00:00:00 2001
+From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
+Date: Sat, 13 Sep 2014 11:59:23 +0900
+Subject: [PATCH] http2: Fix busy loop when EOF is encountered
+
+Previously we did not handle EOF from underlying transport socket and
+wrongly just returned error code CURL_AGAIN from http2_recv, which
+caused busy loop since socket has been closed.  This patch adds the
+code to handle EOF situation and tells the upper layer that we got
+EOF.
+---
+ lib/http2.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/lib/http2.c b/lib/http2.c
+index 604514d..f86d3eb 100644
+--- a/lib/http2.c
++++ b/lib/http2.c
+@@ -744,6 +744,12 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex,
+   }
+
+   infof(conn->data, "nread=%zd\n", nread);
++
++  if(nread == 0) {
++    failf(conn->data, "EOF");
++    return 0;
++  }
++
+   rv = nghttp2_session_mem_recv(httpc->h2,
+                                 (const uint8_t *)httpc->inbuf, nread);
+
+--
+2.0.1