summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <donaldsharp72@gmail.com>2025-04-11 08:39:59 -0400
committerGitHub <noreply@github.com>2025-04-11 08:39:59 -0400
commit94203c4774564e0cf638a481f76ee5a399b28063 (patch)
tree922cfae7b44a2690d3acbe8e129470143e562c24
parent84e46f6087bda181d387189792cb380bd212560e (diff)
parent101b13b7b56028daaaa852bf466ba2846a84eff4 (diff)
Merge pull request #18639 from FRRouting/mergify/bp/stable/9.1/pr-15716stable/9.1
isisd: Fix memory leaks when the transition of neighbor state from non-UP to DOWN (backport #15716)
-rw-r--r--isisd/isis_adjacency.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c
index cba1b91fae..32d3466f5c 100644
--- a/isisd/isis_adjacency.c
+++ b/isisd/isis_adjacency.c
@@ -358,12 +358,15 @@ void isis_adj_state_change(struct isis_adjacency **padj,
* purposes */
adj->last_flap = time(NULL);
adj->flaps++;
- } else if (old_state == ISIS_ADJ_UP) {
- circuit->adj_state_changes++;
+ } else {
+ if (old_state == ISIS_ADJ_UP) {
+ circuit->adj_state_changes++;
- circuit->upadjcount[level - 1]--;
- if (circuit->upadjcount[level - 1] == 0)
- isis_tx_queue_clean(circuit->tx_queue);
+ circuit->upadjcount[level - 1]--;
+ if (circuit->upadjcount[level - 1] == 0)
+ isis_tx_queue_clean(
+ circuit->tx_queue);
+ }
if (new_state == ISIS_ADJ_DOWN) {
listnode_delete(
@@ -409,10 +412,13 @@ void isis_adj_state_change(struct isis_adjacency **padj,
master, send_l2_csnp, circuit,
0, &circuit->t_send_csnp[1]);
}
- } else if (old_state == ISIS_ADJ_UP) {
- circuit->upadjcount[level - 1]--;
- if (circuit->upadjcount[level - 1] == 0)
- isis_tx_queue_clean(circuit->tx_queue);
+ } else {
+ if (old_state == ISIS_ADJ_UP) {
+ circuit->upadjcount[level - 1]--;
+ if (circuit->upadjcount[level - 1] == 0)
+ isis_tx_queue_clean(
+ circuit->tx_queue);
+ }
if (new_state == ISIS_ADJ_DOWN) {
if (adj->circuit->u.p2p.neighbor == adj)