summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2006-10-12 14:30:47 +0000
committerDaniel Stenberg <daniel@haxx.se>2006-10-12 14:30:47 +0000
commitab60a124654dc0326d97271ebd30bb0984f78d8b (patch)
tree1d86e7546f0e2d81695e3ac7d214152e24905469
parent2d38e518679038bb3818991f2f47adb1aa255897 (diff)
downloadcurl-ab60a124654dc0326d97271ebd30bb0984f78d8b.tar.gz
Starting now, adding an easy handle to a multi stack that was already added
to a multi stack will cause CURLM_BAD_EASY_HANDLE to get returned.
-rw-r--r--CHANGES3
-rw-r--r--RELEASE-NOTES1
-rw-r--r--docs/libcurl/libcurl-errors.34
-rw-r--r--lib/multi.c6
4 files changed, 11 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 7eabba8d4..b94055d88 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,9 @@
Changelog
Daniel (12 October 2006)
+- Starting now, adding an easy handle to a multi stack that was already added
+ to a multi stack will cause CURLM_BAD_EASY_HANDLE to get returned.
+
- Jeff Pohlmeyer has been working with the hiperfifo.c example source code,
and while doing so it became apparent that the current timeout system for
the socket API really was a bit awkward since it become quite some work to
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 5b70767b9..77fccaa72 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -27,6 +27,7 @@ This release includes the following changes:
This release includes the following bugfixes:
+ o curl_multi_add_handle on an already added handle now fails gracefully
o multi interface crash if bad function call order was used for cleanup
o put a new URL in saved cookie jar files
o configure --with-gssapi-libs
diff --git a/docs/libcurl/libcurl-errors.3 b/docs/libcurl/libcurl-errors.3
index baa9bc5fd..1d6936002 100644
--- a/docs/libcurl/libcurl-errors.3
+++ b/docs/libcurl/libcurl-errors.3
@@ -219,7 +219,9 @@ Things are fine.
.IP "CURLM_BAD_HANDLE (1)"
The passed-in handle is not a valid CURLM handle.
.IP "CURLM_BAD_EASY_HANDLE (2)"
-An easy handle was not good/valid.
+An easy handle was not good/valid. It could mean that it isn't an easy handle
+at all, or possibly that the handle already is in used by this or another
+multi handle.
.IP "CURLM_OUT_OF_MEMORY (3)"
You are doomed.
.IP "CURLM_INTERNAL_ERROR (4)"
diff --git a/lib/multi.c b/lib/multi.c
index aaa80b228..7272f471a 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -373,8 +373,10 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
if(!GOOD_EASY_HANDLE(easy_handle))
return CURLM_BAD_EASY_HANDLE;
- /* TODO: add some kind of code that prevents a user from being able to
- add the same handle more than once! */
+ /* Prevent users to add the same handle more than once! */
+ if(((struct SessionHandle *)easy_handle)->multi)
+ /* possibly we should create a new unique error code for this condition */
+ return CURLM_BAD_EASY_HANDLE;
/* Now, time to add an easy handle to the multi stack */
easy = (struct Curl_one_easy *)calloc(sizeof(struct Curl_one_easy), 1);