summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@torproject.org>2019-05-08 00:40:49 +0000
committerGeorge Kadianakis <desnacked@riseup.net>2019-05-15 15:10:31 +0300
commit14ec8b89f83ea9cc4fbc7b8bd24194f5408cfea4 (patch)
tree937d58f2000f8d14a53dc83f43b91cce4c89b9d8 /src/core
parent5c2d2b5d11b72fac01c5958f18c83df252f5313d (diff)
downloadtor-14ec8b89f83ea9cc4fbc7b8bd24194f5408cfea4.tar.gz
tor-14ec8b89f83ea9cc4fbc7b8bd24194f5408cfea4.zip
Bug 29085: Avoid monotime usage for rtt estimates if it is not in use.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/or/circuitpadding.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/core/or/circuitpadding.c b/src/core/or/circuitpadding.c
index eeedbc124f..7674f3510c 100644
--- a/src/core/or/circuitpadding.c
+++ b/src/core/or/circuitpadding.c
@@ -1547,10 +1547,26 @@ circpad_estimate_circ_rtt_on_received(circuit_t *circ,
", %d) after two back to back packets. Current RTT: %d",
circ->n_chan ? circ->n_chan->global_identifier : 0,
circ->n_circ_id, mi->rtt_estimate_usec);
- mi->stop_rtt_update = 1;
+ mi->stop_rtt_update = 1;
+
+ if (!mi->rtt_estimate_usec) {
+ static ratelim_t rtt_lim = RATELIM_INIT(600);
+ log_fn_ratelim(&rtt_lim,LOG_NOTICE,LD_BUG,
+ "Circuit got two cells back to back before estimating RTT.");
+ }
}
} else {
- mi->last_received_time_usec = monotime_absolute_usec();
+ const circpad_state_t *state = circpad_machine_current_state(mi);
+
+ /* Since monotime is unpredictably expensive, only update this field
+ * if rtt estimates are needed. Otherwise, stop the rtt update. */
+ if (state->use_rtt_estimate) {
+ mi->last_received_time_usec = monotime_absolute_usec();
+ } else {
+ /* Let's fast-path future decisions not to update rtt if the
+ * feature is not in use. */
+ mi->stop_rtt_update = 1;
+ }
}
}
@@ -1610,8 +1626,9 @@ circpad_estimate_circ_rtt_on_send(circuit_t *circ,
mi->stop_rtt_update = 1;
if (!mi->rtt_estimate_usec) {
- log_fn(LOG_NOTICE, LD_CIRC,
- "Got two cells back to back on a circuit before estimating RTT.");
+ static ratelim_t rtt_lim = RATELIM_INIT(600);
+ log_fn_ratelim(&rtt_lim,LOG_NOTICE,LD_BUG,
+ "Circuit sent two cells back to back before estimating RTT.");
}
}
}