aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES7
-rw-r--r--TODO-RELEASE3
-rw-r--r--lib/multi.c16
3 files changed, 19 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index 7bfa5c1f3..eaee3cb54 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,13 @@
Changelog
+Daniel Stenberg (12 Dec 2008)
+- More work with Igor Novoseltsev to first fix the remaining stuff for
+ removing easy handles from multi handles when the easy handle is/was within
+ a HTTP pipeline. His bug report #2351653
+ (http://curl.haxx.se/bug/view.cgi?id=2351653) was also related and was
+ eventually fixed by a patch by Igor himself.
+
Yang Tse (12 Dec 2008)
- Patrick Monnerat fixed a build regression, introduced in 7.19.2, affecting
OS/400 compilations with IPv6 enabled.
diff --git a/TODO-RELEASE b/TODO-RELEASE
index 3d659b348..fd941e4d2 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -10,9 +10,6 @@ To be addressed in 7.19.3 (planned release: January 2009)
197 - IIS-bug in Digest
- libcurl parts done, no curl options added yet
-199 - "Bug 2351645" adjustment of the patch Daniel S applied
- - Suggested fix posted to list
-
201 - "bug: header data output to the body callback function after set header"
by Shunlong Bai
diff --git a/lib/multi.c b/lib/multi.c
index ccccf7e8f..21f6ec250 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -587,6 +587,8 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
if(easy) {
bool premature = (bool)(easy->state != CURLM_STATE_COMPLETED);
+ bool easy_owns_conn = (bool)(easy->easy_conn &&
+ (easy->easy_conn->data == easy->easy_handle));
/* If the 'state' is not INIT or COMPLETED, we might need to do something
nice to put the easy_handle in a good known state when this returns. */
@@ -624,7 +626,7 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
/* we must call Curl_done() here (if we still "own it") so that we don't
leave a half-baked one around */
- if (easy->easy_conn->data == easy->easy_handle) {
+ if (easy_owns_conn) {
/* Curl_done() clears the conn->data field to lose the association
between the easy handle and the connection
@@ -676,9 +678,15 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
to that since we're not part of that handle anymore */
easy->easy_handle->state.connc = NULL;
- /* and modify the connectindex since this handle can't point to the
- connection cache anymore */
- if(easy->easy_conn &&
+ /* Modify the connectindex since this handle can't point to the
+ connection cache anymore.
+
+ TODO: consider if this is really what we want. The connection cache
+ is within the multi handle and that owns the connections so we should
+ not need to touch connections like this when we just remove an easy
+ handle...
+ */
+ if(easy->easy_conn && easy_owns_conn &&
(easy->easy_conn->send_pipe->size +
easy->easy_conn->recv_pipe->size == 0))
easy->easy_conn->connectindex = -1;