diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-10-29 20:05:27 -0400 | 
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-11-02 16:13:44 -0400 | 
| commit | 63265b5c1f9fb28946376b535a814bec1dbd19ed (patch) | |
| tree | e244c4ed35ac29185f6d77092f646f19fa704b65 | |
| parent | 7a6fc8774ddf74df312c7d4ce0bbdbb5ac01c5fa (diff) | |
*: Convert prefix_free to double pointer
Have the prefix_free code take a double pointer to free the data.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
| -rw-r--r-- | bgpd/bgp_debug.c | 14 | ||||
| -rw-r--r-- | bgpd/bgp_route.c | 2 | ||||
| -rw-r--r-- | bgpd/bgpd.c | 2 | ||||
| -rw-r--r-- | bgpd/rfapi/rfapi_import.c | 4 | ||||
| -rw-r--r-- | bgpd/rfapi/vnc_import_bgp.c | 12 | ||||
| -rw-r--r-- | eigrpd/eigrp_network.c | 3 | ||||
| -rw-r--r-- | eigrpd/eigrp_topology.c | 2 | ||||
| -rw-r--r-- | isisd/isis_circuit.c | 10 | ||||
| -rw-r--r-- | lib/if.c | 6 | ||||
| -rw-r--r-- | lib/prefix.c | 20 | ||||
| -rw-r--r-- | lib/prefix.h | 10 | ||||
| -rw-r--r-- | pbrd/pbr_vty.c | 12 | ||||
| -rw-r--r-- | pimd/pim_neighbor.c | 2 | ||||
| -rw-r--r-- | pimd/pim_tlv.c | 3 | ||||
| -rw-r--r-- | staticd/static_zebra.c | 2 | 
15 files changed, 53 insertions, 51 deletions
diff --git a/bgpd/bgp_debug.c b/bgpd/bgp_debug.c index f476b16188..0e4c3a3e12 100644 --- a/bgpd/bgp_debug.c +++ b/bgpd/bgp_debug.c @@ -209,7 +209,7 @@ static void bgp_debug_list_free(struct list *list)  			listnode_delete(list, filter);  			if (filter->p) -				prefix_free(filter->p); +				prefix_free(&filter->p);  			if (filter->host)  				XFREE(MTYPE_BGP_DEBUG_STR, filter->host); @@ -323,7 +323,7 @@ static int bgp_debug_list_remove_entry(struct list *list, const char *host,  		} else if (p && filter->p->prefixlen == p->prefixlen  			   && prefix_match(filter->p, p)) {  			listnode_delete(list, filter); -			prefix_free(filter->p); +			prefix_free(&filter->p);  			XFREE(MTYPE_BGP_DEBUG_FILTER, filter);  			return 1;  		} @@ -1412,7 +1412,7 @@ DEFPY (debug_bgp_update_prefix_afi_safi,  	ret = bgp_debug_parse_evpn_prefix(vty, argv, argc, &argv_p);  	if (ret != CMD_SUCCESS) { -		prefix_free(argv_p); +		prefix_free(&argv_p);  		return ret;  	} @@ -1425,7 +1425,7 @@ DEFPY (debug_bgp_update_prefix_afi_safi,  		vty_out(vty,  			"BGP updates debugging is already enabled for %s\n",  			buf); -		prefix_free(argv_p); +		prefix_free(&argv_p);  		return CMD_SUCCESS;  	} @@ -1438,7 +1438,7 @@ DEFPY (debug_bgp_update_prefix_afi_safi,  		vty_out(vty, "BGP updates debugging is on for %s\n", buf);  	} -	prefix_free(argv_p); +	prefix_free(&argv_p);  	return CMD_SUCCESS;  } @@ -1477,7 +1477,7 @@ DEFPY (no_debug_bgp_update_prefix_afi_safi,  	ret = bgp_debug_parse_evpn_prefix(vty, argv, argc, &argv_p);  	if (ret != CMD_SUCCESS) { -		prefix_free(argv_p); +		prefix_free(&argv_p);  		return ret;  	} @@ -1505,7 +1505,7 @@ DEFPY (no_debug_bgp_update_prefix_afi_safi,  		vty_out(vty, "BGP updates debugging was not enabled for %s\n",  			buf); -	prefix_free(argv_p); +	prefix_free(&argv_p);  	return ret;  } diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 41e32b3112..c07fa2516e 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -10548,7 +10548,7 @@ static int bgp_show_prefix_longer(struct vty *vty, struct bgp *bgp,  	}  	ret = bgp_show(vty, bgp, afi, safi, type, p, 0); -	prefix_free(p); +	prefix_free(&p);  	return ret;  } diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 06f6f933ac..7621d7ef0f 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -2586,7 +2586,7 @@ int peer_group_delete(struct peer_group *group)  	for (afi = AFI_IP; afi < AFI_MAX; afi++) {  		for (ALL_LIST_ELEMENTS(group->listen_range[afi], node, nnode,  				       prefix)) { -			prefix_free(prefix); +			prefix_free(&prefix);  		}  		list_delete(&group->listen_range[afi]);  	} diff --git a/bgpd/rfapi/rfapi_import.c b/bgpd/rfapi/rfapi_import.c index fe8e874440..660442b492 100644 --- a/bgpd/rfapi/rfapi_import.c +++ b/bgpd/rfapi/rfapi_import.c @@ -1512,7 +1512,7 @@ static int rfapiNhlAddNodeRoutes(  	}  	seen_nexthops = -		skiplist_new(0, vnc_prefix_cmp, (void (*)(void *))prefix_free); +		skiplist_new(0, vnc_prefix_cmp, prefix_free_lists);  	for (bpi = rn->info; bpi; bpi = bpi->next) { @@ -4359,7 +4359,7 @@ rfapiImportTableRefAdd(struct bgp *bgp, struct ecommunity *rt_import_list,  		it->rt_import_list = ecommunity_dup(rt_import_list);  		it->rfg = rfg;  		it->monitor_exterior_orphans = -			skiplist_new(0, NULL, (void (*)(void *))prefix_free); +			skiplist_new(0, NULL, prefix_free_lists);  		/*  		 * fill import route tables from RIBs diff --git a/bgpd/rfapi/vnc_import_bgp.c b/bgpd/rfapi/vnc_import_bgp.c index df06105535..6e8969ad18 100644 --- a/bgpd/rfapi/vnc_import_bgp.c +++ b/bgpd/rfapi/vnc_import_bgp.c @@ -1807,8 +1807,7 @@ static void vnc_import_bgp_exterior_add_route_it(  					RFAPI_MONITOR_EXTERIOR(rn)->source =  						skiplist_new(  							0, NULL, -							(void (*)(void *)) -								prefix_free); +							prefix_free_lists);  					agg_lock_node(rn); /* for skiplist */  				}  				agg_lock_node(rn); /* for skiplist entry */ @@ -2194,8 +2193,7 @@ void vnc_import_bgp_exterior_add_route_interior(  					     ->source) {  					RFAPI_MONITOR_EXTERIOR(rn_interior)  						->source = skiplist_new( -						0, NULL, -						(void (*)(void *))prefix_free); +						0, NULL, prefix_free_lists);  					agg_lock_node(rn_interior);  				}  				skiplist_insert( @@ -2337,8 +2335,7 @@ void vnc_import_bgp_exterior_add_route_interior(  			if (!RFAPI_MONITOR_EXTERIOR(rn_interior)->source) {  				RFAPI_MONITOR_EXTERIOR(rn_interior)->source =  					skiplist_new( -						0, NULL, -						(void (*)(void *))prefix_free); +						0, NULL, prefix_free_lists);  				agg_lock_node(rn_interior); /* sl */  			}  			skiplist_insert( @@ -2527,8 +2524,7 @@ void vnc_import_bgp_exterior_del_route_interior(  			if (!RFAPI_MONITOR_EXTERIOR(par)->source) {  				RFAPI_MONITOR_EXTERIOR(par)->source =  					skiplist_new( -						0, NULL, -						(void (*)(void *))prefix_free); +						0, NULL, prefix_free_lists);  				agg_lock_node(par); /* sl */  			}  			skiplist_insert(RFAPI_MONITOR_EXTERIOR(par)->source, diff --git a/eigrpd/eigrp_network.c b/eigrpd/eigrp_network.c index 3e09ec41bb..324f309290 100644 --- a/eigrpd/eigrp_network.c +++ b/eigrpd/eigrp_network.c @@ -327,8 +327,7 @@ int eigrp_network_unset(struct eigrp *eigrp, struct prefix *p)  	if (!IPV4_ADDR_SAME(&pref->u.prefix4, &p->u.prefix4))  		return 0; -	prefix_ipv4_free(rn->info); -	rn->info = NULL; +	prefix_ipv4_free((struct prefix_ipv4 **)&rn->info);  	route_unlock_node(rn); /* initial reference */  	/* Find interfaces that not configured already.  */ diff --git a/eigrpd/eigrp_topology.c b/eigrpd/eigrp_topology.c index 9cc612eaf1..56dbe3d85e 100644 --- a/eigrpd/eigrp_topology.c +++ b/eigrpd/eigrp_topology.c @@ -197,7 +197,7 @@ void eigrp_prefix_entry_delete(struct eigrp *eigrp, struct route_table *table,  	list_delete(&pe->entries);  	list_delete(&pe->rij);  	eigrp_zebra_route_delete(eigrp, pe->destination); -	prefix_free(pe->destination); +	prefix_free(&pe->destination);  	rn->info = NULL;  	route_unlock_node(rn); // Lookup above diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 1d0e6549df..8343f7d85f 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -338,7 +338,7 @@ void isis_circuit_del_addr(struct isis_circuit *circuit,  		if (ip) {  			listnode_delete(circuit->ip_addrs, ip); -			prefix_ipv4_free(ip); +			prefix_ipv4_free(&ip);  			if (circuit->area)  				lsp_regenerate_schedule(circuit->area,  							circuit->is_type, 0); @@ -358,7 +358,7 @@ void isis_circuit_del_addr(struct isis_circuit *circuit,  			zlog_warn("End of addresses");  		} -		prefix_ipv4_free(ipv4); +		prefix_ipv4_free(&ipv4);  	}  	if (connected->address->family == AF_INET6) {  		ipv6 = prefix_ipv6_new(); @@ -374,7 +374,7 @@ void isis_circuit_del_addr(struct isis_circuit *circuit,  			}  			if (ip6) {  				listnode_delete(circuit->ipv6_link, ip6); -				prefix_ipv6_free(ip6); +				prefix_ipv6_free(&ip6);  				found = 1;  			}  		} else { @@ -386,7 +386,7 @@ void isis_circuit_del_addr(struct isis_circuit *circuit,  			}  			if (ip6) {  				listnode_delete(circuit->ipv6_non_link, ip6); -				prefix_ipv6_free(ip6); +				prefix_ipv6_free(&ip6);  				found = 1;  			}  		} @@ -417,7 +417,7 @@ void isis_circuit_del_addr(struct isis_circuit *circuit,  			lsp_regenerate_schedule(circuit->area, circuit->is_type,  						0); -		prefix_ipv6_free(ipv6); +		prefix_ipv6_free(&ipv6);  	}  	return;  } @@ -869,10 +869,10 @@ struct nbr_connected *nbr_connected_new(void)  void connected_free(struct connected *connected)  {  	if (connected->address) -		prefix_free(connected->address); +		prefix_free(&connected->address);  	if (connected->destination) -		prefix_free(connected->destination); +		prefix_free(&connected->destination);  	XFREE(MTYPE_CONNECTED_LABEL, connected->label); @@ -883,7 +883,7 @@ void connected_free(struct connected *connected)  void nbr_connected_free(struct nbr_connected *connected)  {  	if (connected->address) -		prefix_free(connected->address); +		prefix_free(&connected->address);  	XFREE(MTYPE_NBR_CONNECTED, connected);  } diff --git a/lib/prefix.c b/lib/prefix.c index 5071ca8201..e2bf3b949c 100644 --- a/lib/prefix.c +++ b/lib/prefix.c @@ -905,9 +905,9 @@ struct prefix_ipv4 *prefix_ipv4_new(void)  }  /* Free prefix_ipv4 structure. */ -void prefix_ipv4_free(struct prefix_ipv4 *p) +void prefix_ipv4_free(struct prefix_ipv4 **p)  { -	prefix_free((struct prefix *)p); +	prefix_free((struct prefix **)p);  }  /* If given string is valid return 1 else return 0 */ @@ -1077,9 +1077,9 @@ struct prefix_ipv6 *prefix_ipv6_new(void)  }  /* Free prefix for IPv6. */ -void prefix_ipv6_free(struct prefix_ipv6 *p) +void prefix_ipv6_free(struct prefix_ipv6 **p)  { -	prefix_free((struct prefix *)p); +	prefix_free((struct prefix **)p);  }  /* If given string is valid return 1 else return 0 */ @@ -1484,10 +1484,18 @@ struct prefix *prefix_new(void)  	return p;  } +void prefix_free_lists(void *arg) +{ +	struct prefix *p = arg; + +	prefix_free(&p); +} +  /* Free prefix structure. */ -void prefix_free(struct prefix *p) +void prefix_free(struct prefix **p)  { -	XFREE(MTYPE_PREFIX, p); +	XFREE(MTYPE_PREFIX, *p); +	*p = NULL;  }  /* Utility function to convert ipv4 prefixes to Classful prefixes */ diff --git a/lib/prefix.h b/lib/prefix.h index 784927616a..7a93c766a3 100644 --- a/lib/prefix.h +++ b/lib/prefix.h @@ -396,7 +396,11 @@ extern unsigned int prefix6_bit(const struct in6_addr *prefix,  				const uint16_t prefixlen);  extern struct prefix *prefix_new(void); -extern void prefix_free(struct prefix *); +extern void prefix_free(struct prefix **p); +/* + * Function to handle prefix_free being used as a del function. + */ +extern void prefix_free_lists(void *arg);  extern const char *prefix_family_str(const struct prefix *);  extern int prefix_blen(const struct prefix *);  extern int str2prefix(const char *, struct prefix *); @@ -435,7 +439,7 @@ extern void prefix2sockunion(const struct prefix *, union sockunion *);  extern int str2prefix_eth(const char *, struct prefix_eth *);  extern struct prefix_ipv4 *prefix_ipv4_new(void); -extern void prefix_ipv4_free(struct prefix_ipv4 *); +extern void prefix_ipv4_free(struct prefix_ipv4 **p);  extern int str2prefix_ipv4(const char *, struct prefix_ipv4 *);  extern void apply_mask_ipv4(struct prefix_ipv4 *); @@ -460,7 +464,7 @@ extern in_addr_t ipv4_broadcast_addr(in_addr_t hostaddr, int masklen);  extern int netmask_str2prefix_str(const char *, const char *, char *);  extern struct prefix_ipv6 *prefix_ipv6_new(void); -extern void prefix_ipv6_free(struct prefix_ipv6 *); +extern void prefix_ipv6_free(struct prefix_ipv6 **p);  extern int str2prefix_ipv6(const char *, struct prefix_ipv6 *);  extern void apply_mask_ipv6(struct prefix_ipv6 *); diff --git a/pbrd/pbr_vty.c b/pbrd/pbr_vty.c index 069b3e6c9b..e0fd147b0e 100644 --- a/pbrd/pbr_vty.c +++ b/pbrd/pbr_vty.c @@ -133,10 +133,8 @@ DEFPY(pbr_map_match_src, pbr_map_match_src_cmd,  		if (!pbrms->src)  			pbrms->src = prefix_new();  		prefix_copy(pbrms->src, prefix); -	} else { -		prefix_free(pbrms->src); -		pbrms->src = 0; -	} +	} else +		prefix_free(&pbrms->src);  	pbr_map_check(pbrms); @@ -162,10 +160,8 @@ DEFPY(pbr_map_match_dst, pbr_map_match_dst_cmd,  		if (!pbrms->dst)  			pbrms->dst = prefix_new();  		prefix_copy(pbrms->dst, prefix); -	} else { -		prefix_free(pbrms->dst); -		pbrms->dst = NULL; -	} +	} else +		prefix_free(&pbrms->dst);  	pbr_map_check(pbrms); diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c index 722ecb2a72..3f2aaf2bbe 100644 --- a/pimd/pim_neighbor.c +++ b/pimd/pim_neighbor.c @@ -767,7 +767,7 @@ static void delete_from_neigh_addr(struct interface *ifp,  						other_neigh_str, ifp->name);  					listnode_delete(neigh->prefix_list, p); -					prefix_free(p); +					prefix_free(&p);  				}  			} diff --git a/pimd/pim_tlv.c b/pimd/pim_tlv.c index d93a360448..4fe3237395 100644 --- a/pimd/pim_tlv.c +++ b/pimd/pim_tlv.c @@ -757,8 +757,7 @@ int pim_tlv_parse_addr_list(const char *ifname, struct in_addr src_addr,  		 */  		if (!*hello_option_addr_list) {  			*hello_option_addr_list = list_new(); -			(*hello_option_addr_list)->del = -				(void (*)(void *))prefix_free; +			(*hello_option_addr_list)->del = prefix_free_lists;  		}  		/* diff --git a/staticd/static_zebra.c b/staticd/static_zebra.c index 976f892efb..049cb4b4fa 100644 --- a/staticd/static_zebra.c +++ b/staticd/static_zebra.c @@ -260,7 +260,7 @@ static void static_nht_hash_free(void *data)  {  	struct static_nht_data *nhtd = data; -	prefix_free(nhtd->nh); +	prefix_free(&nhtd->nh);  	XFREE(MTYPE_TMP, nhtd);  }  | 
