- 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
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
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:
o
o improved pipelining
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
advice from friends like these:
Michal Marek
Michal Marek, Dmitry Kurochkin
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:
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
-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

View File

@ -4414,11 +4414,6 @@ CURLcode Curl_done(struct connectdata **connp,
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) &&
conn->readchannel_inuse)
conn->readchannel_inuse = FALSE;
@ -4427,6 +4422,16 @@ CURLcode Curl_done(struct connectdata **connp,
conn->writechannel_inuse = FALSE;
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 */
if(data->req.newurl) {
free(data->req.newurl);