diff options
-rw-r--r-- | CHANGES | 3 | ||||
-rw-r--r-- | RELEASE-NOTES | 1 | ||||
-rw-r--r-- | docs/libcurl/libcurl-errors.3 | 4 | ||||
-rw-r--r-- | lib/multi.c | 6 |
4 files changed, 11 insertions, 3 deletions
@@ -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); |