summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Satiro <raysatiro@yahoo.com>2022-02-20 16:04:07 -0500
committerJay Satiro <raysatiro@yahoo.com>2022-02-21 03:23:12 -0500
commite0dc9765a7b4fdbc38c8994d2b06ce49d26582f5 (patch)
tree2545b724493e8ed9f6f35a1a87131ae5ab28adc6
parentccc2752ce8aa6e98f572e7300ec3df4337cddbc5 (diff)
downloadcurl-e0dc9765a7b4fdbc38c8994d2b06ce49d26582f5.tar.gz
multi: allow user callbacks to call curl_multi_assign
Several years ago a change was made to block user callbacks from calling back into the API when not supported (recursive calls). One of the calls blocked was curl_multi_assign. Recently the blocking was extended to the multi interface API, however curl_multi_assign may need to be called from within those user callbacks (eg CURLMOPT_SOCKETFUNCTION). I can't think of any callback where it would be unsafe to call curl_multi_assign so I removed the restriction entirely. Reported-by: Michael Wallner Ref: https://github.com/curl/curl/commit/b46cfbc Ref: https://github.com/curl/curl/commit/340bb19 Fixes https://github.com/curl/curl/issues/8480 Closes https://github.com/curl/curl/pull/8483
-rw-r--r--docs/libcurl/curl_multi_assign.32
-rw-r--r--lib/multi.c3
2 files changed, 2 insertions, 3 deletions
diff --git a/docs/libcurl/curl_multi_assign.3 b/docs/libcurl/curl_multi_assign.3
index 70a00f884..8961dc3c2 100644
--- a/docs/libcurl/curl_multi_assign.3
+++ b/docs/libcurl/curl_multi_assign.3
@@ -48,6 +48,8 @@ The idea here being that this association (socket to private pointer) is
something that just about every application that uses this API will need and
then libcurl can just as well do it since it already has an internal hash
table lookup for this.
+
+It is acceptable to call this function from your multi callback functions.
.SH EXAMPLE
.nf
/* make our struct pointer associated with socket fd */
diff --git a/lib/multi.c b/lib/multi.c
index 0b76874cd..6fdeafb8e 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -3571,9 +3571,6 @@ CURLMcode curl_multi_assign(struct Curl_multi *multi, curl_socket_t s,
{
struct Curl_sh_entry *there = NULL;
- if(multi->in_callback)
- return CURLM_RECURSIVE_API_CALL;
-
there = sh_getentry(&multi->sockhash, s);
if(!there)