- Dmitry Kurochkin fixed Curl_done() for pipelining, as it could previously

crash!
This commit is contained in:
Daniel Stenberg 2008-01-29 12:58:25 +00:00
parent ceb5a8ca7b
commit 1bfbd25027
4 changed files with 15 additions and 10 deletions

View File

@ -7,6 +7,9 @@
Changelog Changelog
Daniel S (29 Jan 2008) Daniel S (29 Jan 2008)
- Dmitry Kurochkin fixed Curl_done() for pipelining, as it could previously
crash!
- Michal Marek fixed minor mistake in test case 553 that prevented it from - Michal Marek fixed minor mistake in test case 553 that prevented it from
working on other IP-addresses or port numbers. working on other IP-addresses or port numbers.

View File

@ -14,7 +14,7 @@ This release includes the following changes:
This release includes the following bugfixes: This release includes the following bugfixes:
o o improved pipelining
This release includes the following known bugs: This release includes the following known bugs:
@ -31,6 +31,6 @@ New curl mirrors:
This release would not have looked like this without help, code, reports and This release would not have looked like this without help, code, reports and
advice from friends like these: advice from friends like these:
Michal Marek Michal Marek, Dmitry Kurochkin
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@ -12,9 +12,6 @@ may have been fixed since this was written!
wants NTLM and close the connection to the initial CONNECT response: wants NTLM and close the connection to the initial CONNECT response:
http://curl.haxx.se/bug/view.cgi?id=1879375 http://curl.haxx.se/bug/view.cgi?id=1879375
50. Curl_done() and pipelning aren't totally cool together:
http://curl.haxx.se/mail/lib-2008-01/0330.html
49. If using --retry and the transfer timeouts (possibly due to using -m or 49. If using --retry and the transfer timeouts (possibly due to using -m or
-y/-Y) the next attempt doesn't resume the transfer properly from what was -y/-Y) the next attempt doesn't resume the transfer properly from what was
downloaded in the previous attempt but will truncate and restart at the downloaded in the previous attempt but will truncate and restart at the

View File

@ -4414,11 +4414,6 @@ CURLcode Curl_done(struct connectdata **connp,
Curl_expire(data, 0); /* stop timer */ Curl_expire(data, 0); /* stop timer */
if(conn->bits.done)
return CURLE_OK; /* Curl_done() has already been called */
conn->bits.done = TRUE; /* called just now! */
if(Curl_removeHandleFromPipeline(data, conn->recv_pipe) && if(Curl_removeHandleFromPipeline(data, conn->recv_pipe) &&
conn->readchannel_inuse) conn->readchannel_inuse)
conn->readchannel_inuse = FALSE; conn->readchannel_inuse = FALSE;
@ -4427,6 +4422,16 @@ CURLcode Curl_done(struct connectdata **connp,
conn->writechannel_inuse = FALSE; conn->writechannel_inuse = FALSE;
Curl_removeHandleFromPipeline(data, conn->pend_pipe); Curl_removeHandleFromPipeline(data, conn->pend_pipe);
if(conn->bits.done ||
(conn->send_pipe->size + conn->recv_pipe->size != 0 &&
!data->set.reuse_forbid &&
!conn->bits.close))
/* Stop if Curl_done() has already been called or pipeline
is not empty and we do not have to close connection. */
return CURLE_OK;
conn->bits.done = TRUE; /* called just now! */
/* Cleanup possible redirect junk */ /* Cleanup possible redirect junk */
if(data->req.newurl) { if(data->req.newurl) {
free(data->req.newurl); free(data->req.newurl);