http2: remove the stream from the hash in stream_close callback

... and suddenly things work much better!
This commit is contained in:
Daniel Stenberg 2015-05-11 23:17:36 +02:00
Родитель 3e8a5d88a5
Коммит 5871affc7a
2 изменённых файлов: 6 добавлений и 11 удалений

Просмотреть файл

@ -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;
}

Просмотреть файл

@ -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)