http2: remove the stream from the hash in stream_close callback
... and suddenly things work much better!
This commit is contained in:
Родитель
3e8a5d88a5
Коммит
5871affc7a
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
10
lib/url.c
10
lib/url.c
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче