mirror of
https://github.com/moparisthebest/curl
synced 2024-11-15 22:15:13 -05:00
IsPipeliningPossible: only for HTTP
The function that checks if pipelining is possible now requires the HTTP bit to be set so that it doesn't mistakenly tries to do it for other protocols. Bug: http://curl.haxx.se/mail/lib-2010-12/0152.html Reported by: Dmitri Shubin
This commit is contained in:
parent
0fd439ebac
commit
a865bd9fba
25
lib/url.c
25
lib/url.c
@ -2738,12 +2738,14 @@ static bool RTSPConnIsDead(struct connectdata *check)
|
|||||||
}
|
}
|
||||||
#endif /* CURL_DISABLE_RTSP */
|
#endif /* CURL_DISABLE_RTSP */
|
||||||
|
|
||||||
static bool IsPipeliningPossible(const struct SessionHandle *handle)
|
static bool IsPipeliningPossible(const struct SessionHandle *handle,
|
||||||
|
const struct connectdata *conn)
|
||||||
{
|
{
|
||||||
if(handle->multi && Curl_multi_canPipeline(handle->multi) &&
|
if((conn->handler->protocol & PROT_HTTP) &&
|
||||||
(handle->set.httpreq == HTTPREQ_GET ||
|
handle->multi && Curl_multi_canPipeline(handle->multi) &&
|
||||||
handle->set.httpreq == HTTPREQ_HEAD) &&
|
(handle->set.httpreq == HTTPREQ_GET ||
|
||||||
handle->set.httpversion != CURL_HTTP_VERSION_1_0)
|
handle->set.httpreq == HTTPREQ_HEAD) &&
|
||||||
|
handle->set.httpversion != CURL_HTTP_VERSION_1_0)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -2760,13 +2762,6 @@ bool Curl_isPipeliningEnabled(const struct SessionHandle *handle)
|
|||||||
CURLcode Curl_addHandleToPipeline(struct SessionHandle *data,
|
CURLcode Curl_addHandleToPipeline(struct SessionHandle *data,
|
||||||
struct curl_llist *pipeline)
|
struct curl_llist *pipeline)
|
||||||
{
|
{
|
||||||
#ifdef DEBUGBUILD
|
|
||||||
if(!IsPipeliningPossible(data)) {
|
|
||||||
/* when not pipelined, there MUST be no handle in the list already */
|
|
||||||
if(pipeline->head)
|
|
||||||
infof(data, "PIPE when no PIPE supposed!\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if(!Curl_llist_insert_next(pipeline, pipeline->tail, data))
|
if(!Curl_llist_insert_next(pipeline, pipeline->tail, data))
|
||||||
return CURLE_OUT_OF_MEMORY;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
@ -2876,7 +2871,7 @@ ConnectionExists(struct SessionHandle *data,
|
|||||||
{
|
{
|
||||||
long i;
|
long i;
|
||||||
struct connectdata *check;
|
struct connectdata *check;
|
||||||
bool canPipeline = IsPipeliningPossible(data);
|
bool canPipeline = IsPipeliningPossible(data, needle);
|
||||||
|
|
||||||
for(i=0; i< data->state.connc->num; i++) {
|
for(i=0; i< data->state.connc->num; i++) {
|
||||||
bool match = FALSE;
|
bool match = FALSE;
|
||||||
@ -2928,11 +2923,11 @@ ConnectionExists(struct SessionHandle *data,
|
|||||||
struct SessionHandle* sh = gethandleathead(check->send_pipe);
|
struct SessionHandle* sh = gethandleathead(check->send_pipe);
|
||||||
struct SessionHandle* rh = gethandleathead(check->recv_pipe);
|
struct SessionHandle* rh = gethandleathead(check->recv_pipe);
|
||||||
if(sh) {
|
if(sh) {
|
||||||
if(!IsPipeliningPossible(sh))
|
if(!IsPipeliningPossible(sh, check))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if(rh) {
|
else if(rh) {
|
||||||
if(!IsPipeliningPossible(rh))
|
if(!IsPipeliningPossible(rh, check))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user