diff options
author | Mike Perry <mikeperry-git@fscked.org> | 2009-08-31 23:09:54 -0700 |
---|---|---|
committer | Mike Perry <mikeperry-git@fscked.org> | 2009-09-16 15:51:17 -0700 |
commit | 95735e547838e05a574b55da00d3d04c1084452a (patch) | |
tree | bccefe514842acf8f6ba96d0e2c49ad072f512b1 /src | |
parent | 7ac9a66c8fb2ec369a7f99cc502200406f3760b2 (diff) | |
download | tor-95735e547838e05a574b55da00d3d04c1084452a.tar tor-95735e547838e05a574b55da00d3d04c1084452a.tar.gz |
Fix the math.h log() conflict.
It was compiling, but causing segfaults.
Also, adjust when the timer starts for new test circs
and save state every 25 circuits.
Diffstat (limited to 'src')
-rw-r--r-- | src/or/circuitbuild.c | 50 | ||||
-rw-r--r-- | src/or/circuitlist.c | 2 | ||||
-rw-r--r-- | src/or/circuituse.c | 1 | ||||
-rw-r--r-- | src/or/or.h | 3 |
4 files changed, 43 insertions, 13 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index a9ae139f1..d50748ab1 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -9,25 +9,39 @@ * \brief The actual details of building circuits. **/ -// XXX: Move this noise to common/compat.c? -#include <math.h> +#define CIRCUIT_PRIVATE -// also use pow() +#include "or.h" +#include "crypto.h" +/* + * This madness is needed because if we simply #undef log + * before including or.h or log.h, we get linker collisions + * and random segfaults due to memory corruption (and + * not even at calls to log() either!) + */ +#undef log + +/* + * Linux doesn't provide lround in math.h by default, + * but mac os does... Its best just to leave math.h + * out of the picture entirely. + */ +//#define log math_h_log +//#include <math.h> +//#undef log long int lround(double x); double ln(double x); +double log(double x); +double pow(double x, double y); double ln(double x) { return log(x); } -#undef log -#define CIRCUIT_PRIVATE - -#include "or.h" -#include "crypto.h" +#define log _log /********* START VARIABLES **********/ /** Global list of circuit build times */ @@ -98,12 +112,17 @@ circuit_build_times_add_time(circuit_build_times_t *cbt, build_time_t time) return -1; } - cbt->last_circ_at = approx_time(); cbt->circuit_build_times[cbt->build_times_idx] = time; cbt->build_times_idx = (cbt->build_times_idx + 1) % NCIRCUITS_TO_OBSERVE; if (cbt->total_build_times < NCIRCUITS_TO_OBSERVE) cbt->total_build_times++; + if ((cbt->total_build_times % BUILD_TIMES_SAVE_STATE_EVERY) == 0) { + /* Save state every 100 circuit builds */ + if (!get_options()->AvoidDiskWrites) + or_state_mark_dirty(get_or_state(), 0); + } + return 0; } @@ -471,8 +490,10 @@ circuit_build_times_check_too_many_timeouts(circuit_build_times_t *cbt) get_options()->CircuitBuildTimeout = lround(timeout/1000.0); log_notice(LD_CIRC, - "Set circuit build timeout to %d based on %d recent circuit times", - get_options()->CircuitBuildTimeout, RECENT_CIRCUITS); + "Reset circuit build timeout to %d (Xm: %d a: %lf) based on " + "%d recent circuit times", + get_options()->CircuitBuildTimeout, cbt->Xm, cbt->alpha, + RECENT_CIRCUITS); reset: @@ -532,8 +553,11 @@ circuit_build_times_set_timeout(circuit_build_times_t *cbt) get_options()->CircuitBuildTimeout = lround(timeout/1000.0); log_info(LD_CIRC, - "Set circuit build timeout to %d based on %d circuit times", - get_options()->CircuitBuildTimeout, cbt->total_build_times); + "Set circuit build timeout to %d (Xm: %d a: %lf) based on " + "%d circuit times", + get_options()->CircuitBuildTimeout, cbt->Xm, cbt->alpha, + cbt->total_build_times); + } /** Iterate over values of circ_id, starting from conn-\>next_circ_id, diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index 54bda9400..259666732 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -408,6 +408,8 @@ origin_circuit_new(void) init_circuit_base(TO_CIRCUIT(circ)); + circ_times.last_circ_at = approx_time(); + return circ; } diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 844ea7288..d53cb198a 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -527,6 +527,7 @@ circuit_predict_and_launch_new(void) log_info(LD_CIRC, "Have %d clean circs need another buildtime test circ.", num); circuit_launch_by_router(CIRCUIT_PURPOSE_C_GENERAL, NULL, flags); + return; } } diff --git a/src/or/or.h b/src/or/or.h index 809e38572..aeca0226a 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2877,6 +2877,9 @@ typedef uint32_t build_time_t; /* How often in seconds should we build a test circuit */ #define BUILD_TIMES_TEST_FREQUENCY 60 +/* Save state every 25 circuits */ +#define BUILD_TIMES_SAVE_STATE_EVERY 25 + typedef struct { build_time_t circuit_build_times[NCIRCUITS_TO_OBSERVE]; time_t network_last_live; |