Selaa lähdekoodia

Merge remote-tracking branch 'origin/maint-0.2.2'

Conflicts:
	src/or/rephist.c
Nick Mathewson 13 vuotta sitten
vanhempi
commit
99c2bfe76b
2 muutettua tiedostoa jossa 27 lisäystä ja 3 poistoa
  1. 10 1
      src/common/log.c
  2. 17 2
      src/or/rephist.c

+ 10 - 1
src/common/log.c

@@ -382,7 +382,7 @@ logv(int severity, log_domain_mask_t domain, const char *funcname,
       continue;
     } else if (lf->callback) {
       if (domain & LD_NOCB) {
-        if (!callbacks_deferred) {
+        if (!callbacks_deferred && pending_cb_messages) {
           pending_cb_message_t *msg = tor_malloc(sizeof(pending_cb_message_t));
           msg->severity = severity;
           msg->domain = domain;
@@ -531,9 +531,12 @@ void
 logs_free_all(void)
 {
   logfile_t *victim, *next;
+  smartlist_t *messages;
   LOCK_LOGS();
   next = logfiles;
   logfiles = NULL;
+  messages = pending_cb_messages;
+  pending_cb_messages = NULL;
   UNLOCK_LOGS();
   while (next) {
     victim = next;
@@ -543,6 +546,12 @@ logs_free_all(void)
   }
   tor_free(appname);
 
+  SMARTLIST_FOREACH(messages, pending_cb_message_t *, msg, {
+      tor_free(msg->msg);
+      tor_free(msg);
+    });
+  smartlist_free(messages);
+
   /* We _could_ destroy the log mutex here, but that would screw up any logs
    * that happened between here and the end of execution. */
 }

+ 17 - 2
src/or/rephist.c

@@ -2320,13 +2320,19 @@ rep_hist_buffer_stats_init(time_t now)
   start_of_buffer_stats_interval = now;
 }
 
+/** Statistics from a single circuit.  Collected when the circuit closes, or
+ * when we flush statistics to disk. */
 typedef struct circ_buffer_stats_t {
-  uint32_t processed_cells;
+  /** Average number of cells in the circuit's queue */
   double mean_num_cells_in_queue;
+  /** Average time a cell waits in the queue. */
   double mean_time_cells_in_queue;
+  /** Total number of cells sent over this circuit */
+  uint32_t processed_cells;
 } circ_buffer_stats_t;
 
-smartlist_t *circuits_for_buffer_stats = NULL;
+/** List of circ_buffer_stats_t. */
+static smartlist_t *circuits_for_buffer_stats = NULL;
 
 /** Remember cell statistics for circuit <b>circ</b> at time
  * <b>end_of_interval</b> and reset cell counters in case the circuit
@@ -2350,6 +2356,8 @@ rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval)
         circ->timestamp_created.tv_sec :
         start_of_buffer_stats_interval;
   interval_length = (int) (end_of_interval - start_of_interval);
+  if (interval_length <= 0)
+    return;
   stat = tor_malloc_zero(sizeof(circ_buffer_stats_t));
   stat->processed_cells = orcirc->processed_cells;
   /* 1000.0 for s -> ms; 2.0 because of app-ward and exit-ward queues */
@@ -2749,5 +2757,12 @@ rep_hist_free_all(void)
   built_last_stability_doc_at = 0;
   predicted_ports_free();
   bidi_map_free();
+
+  if (circuits_for_buffer_stats) {
+    SMARTLIST_FOREACH(circuits_for_buffer_stats, circ_buffer_stats_t *, s,
+                      tor_free(s));
+    smartlist_free(circuits_for_buffer_stats);
+    circuits_for_buffer_stats = NULL;
+  }
 }