diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2025-04-11 08:39:59 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-11 08:39:59 -0400 | 
| commit | 94203c4774564e0cf638a481f76ee5a399b28063 (patch) | |
| tree | 922cfae7b44a2690d3acbe8e129470143e562c24 /isisd | |
| parent | 84e46f6087bda181d387189792cb380bd212560e (diff) | |
| parent | 101b13b7b56028daaaa852bf466ba2846a84eff4 (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)
Diffstat (limited to 'isisd')
| -rw-r--r-- | isisd/isis_adjacency.c | 24 | 
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)  | 
