aboutsummaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorDániel Bakai <daniel.bakai@tresorit.com>2017-03-24 09:43:27 +0100
committerDaniel Stenberg <daniel@haxx.se>2017-04-04 23:37:18 +0200
commitde05bcb706243546d37047439dabc4e73054cfef (patch)
treef5ac11182e6389c8ba6fb8f34b093b64a25f7479 /tests/unit
parentd40f4e15e73f906cd06919da84e535f52637c1a1 (diff)
multi: fix queueing of pending easy handles
Multi handles repeatedly invert the queue of pending easy handles when used with CURLMOPT_MAX_TOTAL_CONNECTIONS. This is caused by a multistep process involving Curl_splaygetbest and violates the FIFO property of the multi handle. This patch fixes this issue by redefining the "best" node in the context of timeouts as the "smallest not larger than now", and implementing the necessary data structure modifications to do this effectively, namely: - splay nodes with the same key are now stored in a doubly-linked circular list instead of a non-circular one to enable O(1) insertion to the tail of the list - Curl_splayinsert inserts nodes with the same key to the tail of the same list - in case of multiple nodes with the same key, the one on the head of the list gets selected
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/unit1309.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/tests/unit/unit1309.c b/tests/unit/unit1309.c
index 3cf6eefbd..b75b1d74b 100644
--- a/tests/unit/unit1309.c
+++ b/tests/unit/unit1309.c
@@ -52,7 +52,7 @@ static void splayprint(struct Curl_tree * t, int d, char output)
(long)t->key.tv_usec, i);
}
- for(count=0, node = t->same; node; node = node->same, count++)
+ for(count=0, node = t->samen; node != t; node = node->samen, count++)
;
if(output) {