]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Use cbt to tell when to launch parallel intro circuit
authorNick Mathewson <nickm@torproject.org>
Sat, 26 Mar 2011 05:39:11 +0000 (01:39 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 30 Mar 2011 18:41:53 +0000 (14:41 -0400)
Implement feature from trac #2799

changes/cbt_parallel_intro [new file with mode: 0644]
src/or/circuituse.c

diff --git a/changes/cbt_parallel_intro b/changes/cbt_parallel_intro
new file mode 100644 (file)
index 0000000..44e377f
--- /dev/null
@@ -0,0 +1,4 @@
+  o Minor features
+    - Use computed circuit-build timeouts to decide when to launch
+      parallel introdution circuits.  (Previously, we would retry
+      after 15 seconds.)
index ac4bba51f8cbd7c254aa501407d7e1f9c1a4783a..447ec8412d9322d7465294e78819a2e8935e0671 100644 (file)
@@ -204,7 +204,7 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose,
                  int need_uptime, int need_internal)
 {
   circuit_t *circ, *best=NULL;
-  time_t now = time(NULL);
+  struct timeval now;
   int intro_going_on_but_too_old = 0;
 
   tor_assert(conn);
@@ -213,17 +213,16 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose,
              purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT ||
              purpose == CIRCUIT_PURPOSE_C_REND_JOINED);
 
+  tor_gettimeofday(&now);
+
   for (circ=global_circuitlist;circ;circ = circ->next) {
     if (!circuit_is_acceptable(circ,conn,must_be_open,purpose,
-                               need_uptime,need_internal,now))
+                               need_uptime,need_internal,now.tv_sec))
       continue;
 
-/* XXX022 make this 15 be a function of circuit finishing times we've
- * seen lately, a la Fallon Chen's GSoC work -RD */
-#define REND_PARALLEL_INTRO_DELAY 15
     if (purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT &&
-             !must_be_open && circ->state != CIRCUIT_STATE_OPEN &&
-             circ->timestamp_created.tv_sec + REND_PARALLEL_INTRO_DELAY < now) {
+        !must_be_open && circ->state != CIRCUIT_STATE_OPEN &&
+        tv_mdiff(&now, &circ->timestamp_created) > circ_times.timeout_ms) {
       intro_going_on_but_too_old = 1;
       continue;
     }