[or-cvs] [tor/master] Use memory pool for insertion times.

Nick Mathewson nickm at seul.org
Wed Aug 26 15:36:44 UTC 2009


Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Mon, 17 Aug 2009 13:27:09 +0200
Subject: Use memory pool for insertion times.
Commit: 799af41157c74922a8cc7889510e4b1b040ea215

---
 src/or/relay.c |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/or/relay.c b/src/or/relay.c
index 66475b4..b45856d 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -1525,6 +1525,10 @@ static int total_cells_allocated = 0;
 /** A memory pool to allocate packed_cell_t objects. */
 static mp_pool_t *cell_pool = NULL;
 
+/** Memory pool to allocate insertion_time_elem_t objects used for cell
+ * statistics. */
+static mp_pool_t *it_pool = NULL;
+
 /** Allocate structures to hold cells. */
 void
 init_cell_pool(void)
@@ -1533,7 +1537,8 @@ init_cell_pool(void)
   cell_pool = mp_pool_new(sizeof(packed_cell_t), 128*1024);
 }
 
-/** Free all storage used to hold cells. */
+/** Free all storage used to hold cells (and insertion times if we measure
+ * cell statistics). */
 void
 free_cell_pool(void)
 {
@@ -1542,6 +1547,10 @@ free_cell_pool(void)
     mp_pool_destroy(cell_pool);
     cell_pool = NULL;
   }
+  if (it_pool) {
+    mp_pool_destroy(it_pool);
+    it_pool = NULL;
+  }
 }
 
 /** Free excess storage in cell pool. */
@@ -1623,6 +1632,8 @@ cell_queue_append_packed_copy(cell_queue_t *queue, const cell_t *cell)
     uint32_t added;
     insertion_time_queue_t *it_queue = queue->insertion_times;
     int add_new_elem = 0;
+    if (!it_pool)
+      it_pool = mp_pool_new(sizeof(insertion_time_elem_t), 1024);
     tor_gettimeofday(&now);
 #define SECONDS_IN_A_DAY 86400L
     added = (now.tv_sec % SECONDS_IN_A_DAY) * 100L + now.tv_usec / 10000L;
@@ -1639,8 +1650,8 @@ cell_queue_append_packed_copy(cell_queue_t *queue, const cell_t *cell)
         add_new_elem = 1;
     }
     if (add_new_elem) {
-      insertion_time_elem_t *elem =
-          tor_malloc_zero(sizeof(insertion_time_elem_t));
+      insertion_time_elem_t *elem = mp_pool_get(it_pool);
+      elem->next = NULL;
       elem->insertion_time = added;
       elem->counter = 1;
       if (it_queue->last) {
@@ -1671,7 +1682,7 @@ cell_queue_clear(cell_queue_t *queue)
     while (queue->insertion_times->first) {
       insertion_time_elem_t *elem = queue->insertion_times->first;
       queue->insertion_times->first = elem->next;
-      tor_free(elem);
+      mp_pool_release(elem);
     }
     queue->insertion_times = NULL;
   }
@@ -1890,7 +1901,7 @@ connection_or_flush_from_first_active_circuit(or_connection_t *conn, int max,
           it_queue->first = elem->next;
           if (elem == it_queue->last)
             it_queue->last = NULL;
-          tor_free(elem);
+          mp_pool_release(elem);
         }
         orcirc->total_cell_waiting_time += cell_waiting_time;
         orcirc->processed_cells++;
-- 
1.5.6.5




More information about the tor-commits mailing list