diff options
author | Daniel Stenberg <daniel@haxx.se> | 2020-01-05 10:34:19 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2020-01-13 15:44:58 +0100 |
commit | 960753287368e4dee768dd480de90dc07c62a380 (patch) | |
tree | a344eb7b3d33583ef1429bc9a2cb6b8514d2d688 /lib/multi.c | |
parent | 4431ed2484f0e66096642ee76a2bbeedec5bde79 (diff) | |
download | curl-960753287368e4dee768dd480de90dc07c62a380.tar.gz |
ConnectionExists: respect the max_concurrent_streams limits
A regression made the code use 'multiplexed' as a boolean instead of the
counter it is intended to be. This made curl try to "over-populate"
connections with new streams.
This regression came with 41fcdf71a1, shipped in curl 7.65.0.
Also, respect the CURLMOPT_MAX_CONCURRENT_STREAMS value in the same
check.
Reported-by: Kunal Ekawde
Fixes #4779
Closes #4784
Diffstat (limited to 'lib/multi.c')
-rw-r--r-- | lib/multi.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/multi.c b/lib/multi.c index d0f9b8340..1b79d42a4 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -369,6 +369,7 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */ /* -1 means it not set by user, use the default value */ multi->maxconnects = -1; + multi->max_concurrent_streams = 100; #ifdef ENABLE_WAKEUP if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, multi->wakeup_pair) < 0) { @@ -2900,8 +2901,8 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi, if(streams < 1) streams = 100; multi->max_concurrent_streams = - (streams > (long)INITIAL_MAX_CONCURRENT_STREAMS)? - (long)INITIAL_MAX_CONCURRENT_STREAMS : streams; + (streams > (long)INITIAL_MAX_CONCURRENT_STREAMS)? + INITIAL_MAX_CONCURRENT_STREAMS : (unsigned int)streams; } break; default: @@ -3343,8 +3344,8 @@ void Curl_multi_dump(struct Curl_multi *multi) } #endif -size_t Curl_multi_max_concurrent_streams(struct Curl_multi *multi) +unsigned int Curl_multi_max_concurrent_streams(struct Curl_multi *multi) { - return multi ? ((size_t)multi->max_concurrent_streams ? - (size_t)multi->max_concurrent_streams : 100) : 0; + DEBUGASSERT(multi); + return multi->max_concurrent_streams; } |