/** * Destroys route_tree by freeing all its memory. * * @param route_tree route tree to be destroyed */ void destroy_route_tree(struct route_tree *route_tree) { destroy_route_tree_item(route_tree->tree); destroy_failure_route_tree_item(route_tree->failure_tree); shm_free(route_tree->name.s); shm_free(route_tree); return; }
/** * Destroys route_tree_item in shared memory by freing all its memory. * * @param route_tree_item route tree node to be destroyed */ static void destroy_route_tree_item(struct route_tree_item *route_tree_item) { int i; struct route_rule *rs; struct route_rule *rs_tmp; if (!route_tree_item) { LM_ERR("NULL pointer in parameter\n"); } for (i = 0; i < 10; ++i) { if (route_tree_item->nodes[i] != NULL) { destroy_route_tree_item(route_tree_item->nodes[i]); } } if (route_tree_item->rules) { shm_free(route_tree_item->rules); } rs = route_tree_item->rule_list; while (rs != NULL) { rs_tmp = rs->next; destroy_route_rule(rs); rs = rs_tmp; } shm_free(route_tree_item); return; }
/** * Destroys route_tree_item in shared memory by freing all its memory. * * @param route_tree_item route tree node to be destroyed */ static void destroy_route_tree_item(struct route_tree_item *route_tree_item) { int i; struct route_flags *rf; struct route_flags *rf_tmp; if (!route_tree_item) { LM_ERR("NULL pointer in parameter\n"); } for (i = 0; i < 10; ++i) { if (route_tree_item->nodes[i] != NULL) { destroy_route_tree_item(route_tree_item->nodes[i]); } } rf=route_tree_item->flag_list; while (rf!=NULL) { rf_tmp = rf->next; destroy_route_flags(rf); rf = rf_tmp; } }