commit e5e8c69490e6012fc12ed4d4591e073c7d762906 Author: Zack Weinberg zackw@cmu.edu Date: Fri Jan 13 17:43:07 2012 +0000
Fix some bugs in the exponential backoff.
git-svn-id: svn+ssh://spartan.csl.sri.com/svn/private/DEFIANCE@216 a58ff0ac-194c-e011-a152-003048836090 --- src/protocol/chop.cc | 20 ++++++++++---------- src/rng.cc | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/src/protocol/chop.cc b/src/protocol/chop.cc index 6b0d6a4..b7e95fb 100644 --- a/src/protocol/chop.cc +++ b/src/protocol/chop.cc @@ -104,16 +104,16 @@ namespace { CIRCUIT_DECLARE_METHODS(chop);
uint32_t axe_interval() { - return rng_range_geom(30 * 60 * 1000, - std::min((1 << dead_cycles) * 1000, - 20 * 60 * 1000)) - + 5 * 1000; + // 20*60*1000 lies between 2^20 and 2^21. + uint32_t shift = std::max(1u, std::min(20u, dead_cycles)); + uint32_t xv = std::max(1u, std::min(20u * 60 * 1000, 1u << shift)); + return rng_range_geom(30 * 60 * 1000, xv) + 5 * 1000; } uint32_t flush_interval() { - return rng_range_geom(20 * 60 * 1000, - std::min((1 << dead_cycles) * 500, - 10 * 60 * 1000)) - + 1000; + // 10*60*1000 lies between 2^19 and 2^20. + uint32_t shift = std::max(1u, std::min(19u, dead_cycles)); + uint32_t xv = std::max(1u, std::min(10u * 60 * 1000, 1u << shift)); + return rng_range_geom(20 * 60 * 1000, xv) + 1000; } };
@@ -1031,9 +1031,9 @@ chop_circuit_t::drop_downstream(conn_t *conn) else circuit_close(this); } else if (this->cfg->mode == LSN_SIMPLE_SERVER) { - circuit_arm_axe_timer(this, 5000); + circuit_arm_axe_timer(this, this->axe_interval()); } else { - circuit_arm_flush_timer(this, 1); + circuit_arm_flush_timer(this, this->flush_interval()); } } } diff --git a/src/rng.cc b/src/rng.cc index a42c487..f5c0ca4 100644 --- a/src/rng.cc +++ b/src/rng.cc @@ -216,7 +216,7 @@ rng_range_geom(unsigned int hi, unsigned int xv) ( e^{-hi/xe}, 1 ]. Doing this with arithmetic introduces a slight nonuniformity, but we really want to avoid rejection sampling here. */ - double ulo = exp(-hi/xe); + double ulo = exp(-double(hi)/xe); U = ulo + U * (1-ulo);
/* Inverse transform sampling gives us a value for the exponential
tor-commits@lists.torproject.org