summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-06-02 10:42:06 -0700
committerNick Mathewson <nickm@torproject.org>2018-06-02 10:42:06 -0700
commit0c9d6177628059f089e8792255b4b16b0caaa857 (patch)
tree43b7dac3a5aaf15e0b36f05f498ae5601d339ad2
parentdb9ca07c46bbdf5ad63d03c6b1401a6e5c83770e (diff)
parentf15f90e2cac50154c761da94eb9fd642890f2777 (diff)
downloadtor-0c9d6177628059f089e8792255b4b16b0caaa857.tar.gz
tor-0c9d6177628059f089e8792255b4b16b0caaa857.zip
Merge branch 'maint-0.3.3' into release-0.3.3
-rw-r--r--changes/bug261216
-rw-r--r--src/or/circuitstats.c15
2 files changed, 17 insertions, 4 deletions
diff --git a/changes/bug26121 b/changes/bug26121
new file mode 100644
index 0000000000..5f734dd56b
--- /dev/null
+++ b/changes/bug26121
@@ -0,0 +1,6 @@
+ o Minor bugfixes (controller):
+ - Improve accuracy of the BUILDTIMEOUT_SET control port event's
+ TIMEOUT_RATE and CLOSE_RATE fields. (We were previously miscounting
+ the total number of circuits for these field values.) Fixes bug
+ 26121; bugfix on 0.3.3.1-alpha.
+
diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c
index f87bbd822b..f06c2e5e38 100644
--- a/src/or/circuitstats.c
+++ b/src/or/circuitstats.c
@@ -1908,13 +1908,20 @@ cbt_control_event_buildtimeout_set(const circuit_build_times_t *cbt,
/* The timeout rate is the ratio of the timeout count over
* the total number of circuits attempted. The total number of
- * circuits is (timeouts+succeeded+closed), since a circuit can
- * either timeout, close, or succeed. We cast the denominator
+ * circuits is (timeouts+succeeded), since every circuit
+ * either succeeds, or times out. "Closed" circuits are
+ * MEASURE_TIMEOUT circuits whose measurement period expired.
+ * All MEASURE_TIMEOUT circuits are counted in the timeouts stat
+ * before transitioning to MEASURE_TIMEOUT (in
+ * circuit_build_times_mark_circ_as_measurement_only()).
+ * MEASURE_TIMEOUT circuits that succeed are *not* counted as
+ * "succeeded". See circuit_build_times_handle_completed_hop().
+ *
+ * We cast the denominator
* to promote it to double before the addition, to avoid int32
* overflow. */
const double total_circuits =
- ((double)cbt->num_circ_timeouts) + cbt->num_circ_succeeded
- + cbt->num_circ_closed;
+ ((double)cbt->num_circ_timeouts) + cbt->num_circ_succeeded;
if (total_circuits >= 1.0) {
timeout_rate = cbt->num_circ_timeouts / total_circuits;
close_rate = cbt->num_circ_closed / total_circuits;