Commit 5871affc authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

http2: remove the stream from the hash in stream_close callback

... and suddenly things work much better!
parent 3e8a5d88
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -456,6 +456,11 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id,

    stream->error_code = error_code;
    stream->closed = TRUE;

    /* remove the entry from the hash as the stream is now gone */
    Curl_hash_delete(&conn->proto.httpc.streamsh,
                     &stream_id, sizeof(stream_id));
    DEBUGF(infof(conn->data, "Removed stream %x hash!\n", stream_id));
  }
  return 0;
}
@@ -799,7 +804,7 @@ static ssize_t http2_handle_stream_close(struct http_conn *httpc,
    *err = CURLE_HTTP2;
    return -1;
  }
  DEBUGF(infof(data, "http2_recv returns 0\n"));
  DEBUGF(infof(data, "http2_recv returns 0, http2_handle_stream_close\n"));
  return 0;
}

+0 −10
Original line number Diff line number Diff line
@@ -2886,16 +2886,6 @@ void Curl_getoff_all_pipelines(struct SessionHandle *data,
    conn->readchannel_inuse = FALSE;
  if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && send_head)
    conn->writechannel_inuse = FALSE;

  if(conn->httpversion == 20) {
    /* delete this handle from the stream hash */
    struct HTTP *stream = data->req.protop;
    if(stream && Curl_hash_delete(&conn->proto.httpc.streamsh,
                                  &stream->stream_id,
                                  sizeof(stream->stream_id))) {
      infof(conn->data, "Failed to remove handle from h2 stream hash!!\n");
    }
  }
}

static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke)