[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] [tor/master] Time for some debugging by asserts.
Author: Mike Perry <mikeperry-git@xxxxxxxxxx>
Date: Thu, 10 Sep 2009 22:12:46 -0700
Subject: Time for some debugging by asserts.
Commit: 09a75ad31609b30f9e4a057373f2c4f17427eaf9
Got a negative timeout value on startup. Need to narrow it down.
---
src/or/circuitbuild.c | 28 +++++++++++++++++++++++-----
1 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 05aca5f..4999078 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -460,7 +460,12 @@ double
circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
double quantile)
{
- double ret = cbt->Xm/pow(1.0-quantile,1.0/cbt->alpha);
+ double ret;
+ tor_assert(quantile >= 0);
+ tor_assert(1.0-quantile > 0);
+ tor_assert(cbt->Xm > 0);
+
+ ret = cbt->Xm/pow(1.0-quantile,1.0/cbt->alpha);
if (ret > INT32_MAX) {
ret = INT32_MAX;
}
@@ -472,7 +477,9 @@ circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
double
circuit_build_times_cdf(circuit_build_times_t *cbt, double x)
{
- double ret = 1.0-pow(cbt->Xm/x,cbt->alpha);
+ double ret;
+ tor_assert(cbt->Xm > 0);
+ ret = 1.0-pow(cbt->Xm/x,cbt->alpha);
tor_assert(0 <= ret && ret <= 1.0);
return ret;
}
@@ -488,8 +495,13 @@ circuit_build_times_generate_sample(circuit_build_times_t *cbt,
double q_lo, double q_hi)
{
uint64_t r = crypto_rand_uint64(UINT64_MAX-1);
- double u = q_lo + ((q_hi-q_lo)*r)/(1.0*UINT64_MAX);
build_time_t ret;
+ double u;
+
+ tor_assert(q_lo >= 0);
+ tor_assert(q_hi < 1);
+
+ u = q_lo + ((q_hi-q_lo)*r)/(1.0*UINT64_MAX);
tor_assert(0 <= u && u < 1.0);
ret = lround(circuit_build_times_calculate_timeout(cbt, u));
@@ -538,7 +550,10 @@ circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
// CircBuildTimeout = Xm*((1-0.8))^(-1/a))
// ln(CircBuildTimeout) = ln(Xm)+ln(((1-0.8)))*(-1/a)
// -ln(1-0.8)/(ln(CircBuildTimeout)-ln(Xm))=a
+ tor_assert(quantile > 0);
+ tor_assert(cbt->Xm > 0);
cbt->alpha = ln(1.0-quantile)/(ln(cbt->Xm)-ln(timeout));
+ tor_assert(cbt->alpha > 0);
}
/**
@@ -555,6 +570,7 @@ circuit_build_times_count_pretimeouts(circuit_build_times_t *cbt)
((double)cbt->pre_timeouts)/
(cbt->pre_timeouts+cbt->total_build_times);
cbt->Xm = circuit_build_times_min(cbt);
+ tor_assert(cbt->Xm > 0);
// Use current timeout to get an estimate on alpha
circuit_build_times_initial_alpha(cbt, timeout_quantile,
cbt->timeout*1000);
@@ -630,7 +646,7 @@ circuit_build_times_check_too_many_timeouts(circuit_build_times_t *cbt)
double timeout;
int i;
- if ((cbt->pre_timeouts+cbt->total_build_times) < RECENT_CIRCUITS) {
+ if ((cbt->pre_timeouts + cbt->total_build_times) < RECENT_CIRCUITS) {
return 0;
}
@@ -656,7 +672,8 @@ circuit_build_times_check_too_many_timeouts(circuit_build_times_t *cbt)
log_notice(LD_CIRC,
"Network connection speed appears to have changed. "
- "Resetting timeouts.");
+ "Resetting timeouts after %d pretimouts and %d buildtimes",
+ cbt->pre_timeouts, cbt->total_build_times);
if (Xm >= (build_time_t)cbt->timeout*1000) {
Xm = circuit_build_times_min(cbt);
@@ -669,6 +686,7 @@ circuit_build_times_check_too_many_timeouts(circuit_build_times_t *cbt)
goto reset;
}
}
+ tor_assert(Xm > 0);
cbt->Xm = Xm;
circuit_build_times_initial_alpha(cbt, 1.0-timeout_rate,
--
1.5.6.5