]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix the math.h log() conflict.
authorMike Perry <mikeperry-git@fscked.org>
Tue, 1 Sep 2009 06:09:54 +0000 (23:09 -0700)
committerMike Perry <mikeperry-git@fscked.org>
Wed, 16 Sep 2009 22:51:17 +0000 (15:51 -0700)
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
src/or/circuitlist.c
src/or/circuituse.c
src/or/or.h

index a9ae139f13bd2244befd0ebf1344ebce9ebc6f30..d50748ab1f005d0f1d2da0198f1dccd98e57b4b0 100644 (file)
@@ -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,
index 54bda94001915719d626204aa3d9fd17e4747aa7..259666732ac4aa808339f7c50f35a5bc847588be 100644 (file)
@@ -408,6 +408,8 @@ origin_circuit_new(void)
 
   init_circuit_base(TO_CIRCUIT(circ));
 
+  circ_times.last_circ_at = approx_time();
+
   return circ;
 }
 
index 844ea72883ab44ae15ca7b004d4786750106ff5f..d53cb198a2613d4aa4c09a06eba4f5c909a472b1 100644 (file)
@@ -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;
   }
 }
 
index 809e38572fac35773b766ed439a490c931665502..aeca0226a1428208ca1d2ffb97cfb86617789605 100644 (file)
@@ -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;