summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2020-08-11 15:43:42 +0200
committerDaniel Stenberg <daniel@haxx.se>2020-08-12 07:55:45 +0200
commitcb8cf9d70f6c4768c793bbfe18c27606689583cd (patch)
treeec86342a415c34a289ec7d2ac27ca7f7145d1898
parentc46339eca10cdc4b9c83bd371835ed987086fb08 (diff)
downloadcurl-cb8cf9d70f6c4768c793bbfe18c27606689583cd.tar.gz
KNOWN_BUGS: A shared connection cache is not thread-safe
Closes #4915 Closes #5802
-rw-r--r--docs/KNOWN_BUGS9
-rw-r--r--docs/libcurl/curl_share_setopt.38
2 files changed, 13 insertions, 4 deletions
diff --git a/docs/KNOWN_BUGS b/docs/KNOWN_BUGS
index 267a977dd..583995cac 100644
--- a/docs/KNOWN_BUGS
+++ b/docs/KNOWN_BUGS
@@ -102,6 +102,7 @@ problems may have been fixed or changed somewhat since this was written!
11.8 DoH leaks memory after followlocation
11.9 DoH doesn't inherit all transfer options
11.10 Blocking socket operations in non-blocking API
+ 11.11 A shared connection cache is not thread-safe
12. LDAP and OpenLDAP
12.1 OpenLDAP hangs after returning results
@@ -744,6 +745,14 @@ problems may have been fixed or changed somewhat since this was written!
The list of blocking socket operations is in TODO section "More non-blocking".
+11.11 A shared connection cache is not thread-safe
+
+ The share interface offers CURL_LOCK_DATA_CONNECT to have multiple easy
+ handle share a connection cache, but due to how connections are used they are
+ still not thread-safe when used shared.
+
+ See https://github.com/curl/curl/issues/4915
+
12. LDAP and OpenLDAP
12.1 OpenLDAP hangs after returning results
diff --git a/docs/libcurl/curl_share_setopt.3 b/docs/libcurl/curl_share_setopt.3
index 0291d93c2..7a3e2388c 100644
--- a/docs/libcurl/curl_share_setopt.3
+++ b/docs/libcurl/curl_share_setopt.3
@@ -74,10 +74,10 @@ by default. Note this symbol was added in 7.10.3 but was not implemented until
7.23.0.
.IP CURL_LOCK_DATA_CONNECT
Put the connection cache in the share object and make all easy handles using
-this share object share the connection cache. Using this, you can for example
-do multi-threaded libcurl use with one handle in each thread, and yet have a
-shared pool of unused connections and this way get way better connection
-re-use than if you use one separate pool in each thread.
+this share object share the connection cache.
+
+Note that due to a known bug, it is not safe to share connections this way
+between multiple concurrent threads.
Connections that are used for HTTP/1.1 Pipelining or HTTP/2 multiplexing only
get additional transfers added to them if the existing connection is held by