make rt_entry and rt_path to use the new (cookie based) memory manager
authorHannes Gredler <hannes@gredler.at>
Tue, 6 May 2008 21:26:57 +0000 (23:26 +0200)
committerHannes Gredler <hannes@gredler.at>
Tue, 6 May 2008 21:26:57 +0000 (23:26 +0200)
src/process_routes.c
src/routing_table.c
src/routing_table.h

index c436450..4983a7a 100644 (file)
@@ -50,6 +50,7 @@
 #include "common/avl.h"
 #include "net_olsr.h"
 #include "tc_set.h"
+#include "olsr_cookie.h"
 
 #ifdef WIN32
 #undef strerror
@@ -280,7 +281,7 @@ olsr_del_kernel_routes(struct list_node *head_node)
     olsr_delete_kernel_route(rt);
 
     list_remove(&rt->rt_change_node);
-    free(rt);
+    olsr_cookie_free(rt_mem_cookie, rt);
   }
 }
 
index 589be22..0d0c213 100644 (file)
 
 #include <assert.h>
 
+/* Cookies */
+struct olsr_cookie_info *rt_mem_cookie = NULL;
+struct olsr_cookie_info *rtp_mem_cookie = NULL;
+
 /*
  * Sven-Ola: if the current internet gateway is switched, the
  * NAT connection info is lost for any active TCP/UDP session.
@@ -162,9 +166,20 @@ avl_comp_ipv6_prefix (const void *prefix1, const void *prefix2)
 void
 olsr_init_routing_table(void)
 {
+  OLSR_PRINTF(5, "RIB: init routing tree\n");
+
   /* the routing tree */
   avl_init(&routingtree, avl_comp_prefix_default);
   routingtree_version = 0;
+
+  /*
+   * Get some cookies for memory stats and memory recycling.
+   */
+  rt_mem_cookie = olsr_alloc_cookie("rt_entry", OLSR_COOKIE_TYPE_MEMORY);
+  olsr_cookie_set_memory_size(rt_mem_cookie, sizeof(struct rt_entry));
+
+  rtp_mem_cookie = olsr_alloc_cookie("rt_path", OLSR_COOKIE_TYPE_MEMORY);
+  olsr_cookie_set_memory_size(rtp_mem_cookie, sizeof(struct rt_path));
 }
 
 /**
@@ -216,7 +231,7 @@ olsr_update_rt_path(struct rt_path *rtp, struct tc_entry *tc,
 static struct rt_entry *
 olsr_alloc_rt_entry(struct olsr_ip_prefix *prefix)
 {
-  struct rt_entry *rt = olsr_malloc(sizeof(struct rt_entry), __FUNCTION__);
+  struct rt_entry *rt = olsr_cookie_malloc(rt_mem_cookie);
   if (!rt) {
     return NULL;
   }
@@ -245,7 +260,7 @@ static struct rt_path *
 olsr_alloc_rt_path(struct tc_entry *tc,
                    struct olsr_ip_prefix *prefix, olsr_u8_t origin)
 {
-  struct rt_path *rtp = olsr_malloc(sizeof(struct rt_path), __FUNCTION__);
+  struct rt_path *rtp = olsr_cookie_malloc(rtp_mem_cookie);
 
   if (!rtp) {
     return NULL;
@@ -356,7 +371,7 @@ olsr_delete_rt_path(struct rt_path *rtp)
     current_inetgw = NULL;
   }
 
-  free(rtp);
+  olsr_cookie_free(rtp_mem_cookie, rtp);
 }
 
 
index 8440149..01d532e 100644 (file)
@@ -49,6 +49,7 @@
 #include <net/route.h>
 #include "hna_set.h"
 #include "link_set.h"
+#include "olsr_cookie.h"
 #include "common/avl.h"
 #include "common/list.h"
 
@@ -202,6 +203,7 @@ union olsr_kernel_route
 
 extern struct avl_tree routingtree;
 extern unsigned int routingtree_version;
+extern struct olsr_cookie_info *rt_mem_cookie;
 
 void
 olsr_init_routing_table(void);