Starting now, adding an easy handle to a multi stack that was already added
authorDaniel Stenberg <daniel@haxx.se>
Thu, 12 Oct 2006 14:30:47 +0000 (14:30 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 12 Oct 2006 14:30:47 +0000 (14:30 +0000)
to a multi stack will cause CURLM_BAD_EASY_HANDLE to get returned.

CHANGES
RELEASE-NOTES
docs/libcurl/libcurl-errors.3
lib/multi.c

diff --git a/CHANGES b/CHANGES
index 7eabba8..b94055d 100644 (file)
--- 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
index 5b70767..77fccaa 100644 (file)
@@ -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
index baa9bc5..1d69360 100644 (file)
@@ -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)"
index aaa80b2..7272f47 100644 (file)
@@ -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);