X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=dummynet2%2Fradix.c;h=47aa0b3b6221a5d4f0636cee67857f8d07fdd2f8;hb=40445faa1db58b90083115bc315d095e7eb2fe51;hp=6e256d3cf8ba2828a0efc9ca86ec2af49f70bea5;hpb=7677cf8ea078c67480dbef9bdbda736cc97b5ac0;p=ipfw.git diff --git a/dummynet2/radix.c b/dummynet2/radix.c index 6e256d3..47aa0b3 100644 --- a/dummynet2/radix.c +++ b/dummynet2/radix.c @@ -54,7 +54,7 @@ #define log(x, arg...) fprintf(stderr, ## arg) #define panic(x) fprintf(stderr, "PANIC: %s", x), exit(1) #define min(a, b) ((a) < (b) ? (a) : (b) ) -#include "include/net/radix.h" +#include #endif /* !_KERNEL */ static int rn_walktree_from(struct radix_node_head *h, void *a, void *m, @@ -934,13 +934,10 @@ on1: MKFree(m); m = mm; } - if (m) { - /* these two variables are used to avoid a possible - compiler bug while using a macro with variable arguments */ - void *log_m = m; - void *log_x = x; - log(LOG_ERR, "rn_delete: Orphaned Mask %p at %p\n", log_m, log_x); - } + if (m) + log(LOG_ERR, + "rn_delete: Orphaned Mask %p at %p\n", + m, x); } } /* @@ -1165,6 +1162,22 @@ rn_inithead(head, off) return (1); } +int +rn_detachhead(void **head) +{ + struct radix_node_head *rnh; + + KASSERT((head != NULL && *head != NULL), + ("%s: head already freed", __func__)); + rnh = *head; + + /* Free nodes. */ + Free(rnh); + + *head = NULL; + return (1); +} + void rn_init(int maxk) {