summaryrefslogtreecommitdiff
path: root/isisd
diff options
context:
space:
mode:
authorRuss White <russ@riw.us>2024-07-02 07:25:51 -0400
committerGitHub <noreply@github.com>2024-07-02 07:25:51 -0400
commit63924c9245f8c64e0bd6897b02ffd60ed9e91699 (patch)
treeafc00d32a7f0e7a4e08a295b34760408d3f258a7 /isisd
parent09959645a3e55a0e048861433fedb4e32d930e12 (diff)
parent5009f7539ad6bf496158499917dcf3f7ab760753 (diff)
Merge pull request #15716 from zhou-run/202404092101
isisd: Fix memory leaks when the transition of neighbor state from non-UP to DOWN
Diffstat (limited to 'isisd')
-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 430bee92bf..b81a0cc2f0 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)