1
0
mirror of https://github.com/moparisthebest/curl synced 2024-11-11 12:05:06 -05:00

Dmitry Kurochkin's pipelining close-down segfault fix

This commit is contained in:
Daniel Stenberg 2008-01-23 12:22:04 +00:00
parent 34cf35051a
commit 79cb74f03a

View File

@ -584,13 +584,18 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
alive connections when this is removed */ alive connections when this is removed */
multi->num_alive--; multi->num_alive--;
if(easy->easy_handle->state.is_in_pipeline && if(easy->easy_conn &&
easy->easy_handle->state.is_in_pipeline &&
easy->state > CURLM_STATE_WAITDO && easy->state > CURLM_STATE_WAITDO &&
easy->state < CURLM_STATE_COMPLETED) easy->state < CURLM_STATE_COMPLETED) {
/* If the handle is in a pipeline and has started sending off its /* If the handle is in a pipeline and has started sending off its
request but not received its reponse yet, we need to close request but not received its reponse yet, we need to close
connection. */ connection. */
easy->easy_conn->bits.close = TRUE; easy->easy_conn->bits.close = TRUE;
/* Set connection owner so that Curl_done() closes it.
We can sefely do this here since connection is killed. */
easy->easy_conn->data = easy->easy_handle;
}
/* The timer must be shut down before easy->multi is set to NULL, /* The timer must be shut down before easy->multi is set to NULL,
else the timenode will remain in the splay tree after else the timenode will remain in the splay tree after