diff options
Diffstat (limited to 'src/ipcpd')
-rw-r--r-- | src/ipcpd/normal/pol/alternate_pff.c | 1 | ||||
-rw-r--r-- | src/ipcpd/normal/pol/graph.c | 14 |
2 files changed, 8 insertions, 7 deletions
diff --git a/src/ipcpd/normal/pol/alternate_pff.c b/src/ipcpd/normal/pol/alternate_pff.c index cb438c5f..3cb99d9c 100644 --- a/src/ipcpd/normal/pol/alternate_pff.c +++ b/src/ipcpd/normal/pol/alternate_pff.c @@ -234,6 +234,7 @@ void alternate_pff_destroy(struct pff_i * pff_i) htable_destroy(pff_i->table); del_nhops_down(pff_i); + del_addrs(pff_i); pthread_rwlock_destroy(&pff_i->lock); free(pff_i); } diff --git a/src/ipcpd/normal/pol/graph.c b/src/ipcpd/normal/pol/graph.c index 41a27207..007e1047 100644 --- a/src/ipcpd/normal/pol/graph.c +++ b/src/ipcpd/normal/pol/graph.c @@ -612,9 +612,9 @@ int graph_routing_table_lfa(struct graph * graph, pthread_mutex_lock(&graph->lock); for (j = 0; j < PROG_MAX_FLOWS; j++) { - n_dist[i] = NULL; - n_index[i] = -1; - addrs[i] = -1; + n_dist[j] = NULL; + n_index[j] = -1; + addrs[j] = -1; } /* Get the normal next hops routing table. */ @@ -660,17 +660,17 @@ int graph_routing_table_lfa(struct graph * graph, continue; if (n_dist[j][v->index] < - s_dist[n_index[j]] + s_dist[v->index]) { + s_dist[n_index[j]] + s_dist[v->index]) if (add_lfa_to_table(table, v->addr, addrs[j])) goto fail_add_lfa; - } - - free(n_dist[j]); } } pthread_mutex_unlock(&graph->lock); + for (j = 0; j < i; j++) + free(n_dist[j]); + free(s_dist); return 0; |