mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 06:50:17 +00:00
Merge pull request #5844 from qlyoung/fix-zebra-gr-unnecessary-malloc
Fix zebra gr unnecessary malloc
This commit is contained in:
commit
ac26ef2b25
@ -468,9 +468,7 @@ static int32_t zebra_gr_route_stale_delete_timer_expiry(struct thread *thread)
|
|||||||
LOG_GR("%s: Client %s all starle routes processed", __func__,
|
LOG_GR("%s: Client %s all starle routes processed", __func__,
|
||||||
zebra_route_string(client->proto));
|
zebra_route_string(client->proto));
|
||||||
|
|
||||||
if (info->current_prefix != NULL)
|
XFREE(MTYPE_TMP, info->current_prefix);
|
||||||
XFREE(MTYPE_TMP, info->current_prefix);
|
|
||||||
info->current_prefix = NULL;
|
|
||||||
info->current_afi = 0;
|
info->current_afi = 0;
|
||||||
zebra_gr_delete_stale_client(info);
|
zebra_gr_delete_stale_client(info);
|
||||||
}
|
}
|
||||||
@ -516,7 +514,6 @@ static int32_t zebra_gr_delete_stale_route(struct client_gr_info *info,
|
|||||||
struct route_entry *next;
|
struct route_entry *next;
|
||||||
struct route_table *table;
|
struct route_table *table;
|
||||||
int32_t n = 0;
|
int32_t n = 0;
|
||||||
struct prefix *p;
|
|
||||||
afi_t afi, curr_afi;
|
afi_t afi, curr_afi;
|
||||||
uint8_t proto;
|
uint8_t proto;
|
||||||
uint16_t instance;
|
uint16_t instance;
|
||||||
@ -541,25 +538,21 @@ static int32_t zebra_gr_delete_stale_route(struct client_gr_info *info,
|
|||||||
/* Process routes for all AFI */
|
/* Process routes for all AFI */
|
||||||
for (afi = curr_afi; afi < AFI_MAX; afi++) {
|
for (afi = curr_afi; afi < AFI_MAX; afi++) {
|
||||||
table = zvrf->table[afi][SAFI_UNICAST];
|
table = zvrf->table[afi][SAFI_UNICAST];
|
||||||
p = info->current_prefix;
|
|
||||||
|
|
||||||
if (table) {
|
if (table) {
|
||||||
/*
|
/*
|
||||||
* If the current prefix is NULL then get the first
|
* If the current prefix is NULL then get the first
|
||||||
* route entry in the table
|
* route entry in the table
|
||||||
*/
|
*/
|
||||||
if (p == NULL) {
|
if (info->current_prefix == NULL) {
|
||||||
rn = route_top(table);
|
rn = route_top(table);
|
||||||
if (rn == NULL)
|
if (rn == NULL)
|
||||||
continue;
|
continue;
|
||||||
p = XCALLOC(MTYPE_TMP, sizeof(struct prefix));
|
|
||||||
if (p == NULL)
|
|
||||||
return -1;
|
|
||||||
curr = rn;
|
curr = rn;
|
||||||
prefix_copy(p, &rn->p);
|
|
||||||
} else
|
} else
|
||||||
/* Get the next route entry */
|
/* Get the next route entry */
|
||||||
curr = route_table_get_next(table, p);
|
curr = route_table_get_next(
|
||||||
|
table, info->current_prefix);
|
||||||
|
|
||||||
for (rn = curr; rn; rn = srcdest_route_next(rn)) {
|
for (rn = curr; rn; rn = srcdest_route_next(rn)) {
|
||||||
RNODE_FOREACH_RE_SAFE (rn, re, next) {
|
RNODE_FOREACH_RE_SAFE (rn, re, next) {
|
||||||
@ -583,9 +576,13 @@ static int32_t zebra_gr_delete_stale_route(struct client_gr_info *info,
|
|||||||
*/
|
*/
|
||||||
if ((n >= ZEBRA_MAX_STALE_ROUTE_COUNT)
|
if ((n >= ZEBRA_MAX_STALE_ROUTE_COUNT)
|
||||||
&& (info->delete == false)) {
|
&& (info->delete == false)) {
|
||||||
prefix_copy(p, &rn->p);
|
|
||||||
info->current_afi = afi;
|
info->current_afi = afi;
|
||||||
info->current_prefix = p;
|
info->current_prefix = XCALLOC(
|
||||||
|
MTYPE_TMP,
|
||||||
|
sizeof(struct prefix));
|
||||||
|
prefix_copy(
|
||||||
|
info->current_prefix,
|
||||||
|
&rn->p);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -595,11 +592,7 @@ static int32_t zebra_gr_delete_stale_route(struct client_gr_info *info,
|
|||||||
* Reset the current prefix to indicate processing completion
|
* Reset the current prefix to indicate processing completion
|
||||||
* of the current AFI
|
* of the current AFI
|
||||||
*/
|
*/
|
||||||
if (info->current_prefix) {
|
XFREE(MTYPE_TMP, info->current_prefix);
|
||||||
XFREE(MTYPE_TMP, info->current_prefix);
|
|
||||||
info->current_prefix = NULL;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user