]> granicus.if.org Git - curl/commitdiff
http2: Check session closure early in http2_recv
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Fri, 19 Feb 2016 15:05:47 +0000 (00:05 +0900)
committerJay Satiro <raysatiro@yahoo.com>
Tue, 12 Apr 2016 01:43:26 +0000 (21:43 -0400)
Ref: https://github.com/curl/curl/issues/659
Ref: https://github.com/curl/curl/pull/663

lib/http2.c

index e15237e771a778f40ad365d25a8c99d2c4370a15..616c9d194773a5e25014fd4b9c3d3ff48a537165 100644 (file)
@@ -1150,6 +1150,14 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex,
 
   (void)sockindex; /* we always do HTTP2 on sockindex 0 */
 
+  if(!nghttp2_session_want_read(httpc->h2) &&
+     !nghttp2_session_want_write(httpc->h2)) {
+    DEBUGF(infof(data,
+                 "http2_recv: nothing to do in this session\n"));
+    *err = CURLE_HTTP2;
+    return -1;
+  }
+
   /* Nullify here because we call nghttp2_session_send() and they
      might refer to the old buffer. */
   stream->upload_mem = NULL;
@@ -1231,13 +1239,6 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex,
     *err = CURLE_AGAIN;
     return -1;
   }
-  else if(!nghttp2_session_want_read(httpc->h2) &&
-          !nghttp2_session_want_write(httpc->h2)) {
-    DEBUGF(infof(data,
-                 "http2_recv: nothing to do in this session\n"));
-    *err = CURLE_HTTP2;
-    return -1;
-  }
   else {
     char *inbuf;
     /* remember where to store incoming data for this stream and how big the