From: Mike Perry Date: Tue, 1 Sep 2009 06:09:54 +0000 (-0700) Subject: Fix the math.h log() conflict. X-Git-Tag: tor-0.2.2.2-alpha~24^2~21 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=95735e547838e05a574b55da00d3d04c1084452a;p=thirdparty%2Ftor.git 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. --- diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index a9ae139f13..d50748ab1f 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 +#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 +//#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 54bda94001..259666732a 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 844ea72883..d53cb198a2 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 809e38572f..aeca0226a1 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;