[or-cvs] [tor/master] Fix the math.h log() conflict.
arma at seul.org
arma at seul.org
Thu Sep 17 01:46:23 UTC 2009
Author: Mike Perry <mikeperry-git at fscked.org>
Date: Mon, 31 Aug 2009 23:09:54 -0700
Subject: Fix the math.h log() conflict.
Commit: 95735e547838e05a574b55da00d3d04c1084452a
It was compiling, but causing segfaults.
Also, adjust when the timer starts for new test circs
and save state every 25 circuits.
---
src/or/circuitbuild.c | 50 ++++++++++++++++++++++++++++++++++++------------
src/or/circuitlist.c | 2 +
src/or/circuituse.c | 1 +
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 a9ae139..d50748a 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 54bda94..2596667 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 844ea72..d53cb19 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 809e385..aeca022 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;
--
1.5.6.5
More information about the tor-commits
mailing list