[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