summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_fsm.c2
-rw-r--r--bgpd/bgpd.c2
-rw-r--r--bgpd/bgpd.h2
3 files changed, 4 insertions, 2 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index 1eeb141155..98ebf51385 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -2749,7 +2749,7 @@ static void bgp_gr_update_mode_of_all_peers(struct bgp *bgp,
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
else
- bgp_session_reset(peer);
+ bgp_session_reset_safe(peer, &nnode);
}
}
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index b32a4640f0..44cd24565a 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -149,7 +149,7 @@ void bgp_session_reset(struct peer *peer)
* during walk of peer list, we would end up accessing the freed next
* node. This function moves the next node along.
*/
-static void bgp_session_reset_safe(struct peer *peer, struct listnode **nnode)
+void bgp_session_reset_safe(struct peer *peer, struct listnode **nnode)
{
struct listnode *n;
struct peer *npeer;
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
index 6e6358bac7..b733be9f0d 100644
--- a/bgpd/bgpd.h
+++ b/bgpd/bgpd.h
@@ -2858,6 +2858,8 @@ extern bool bgp_path_attribute_treat_as_withdraw(struct peer *peer, char *buf,
extern void srv6_function_free(struct bgp_srv6_function *func);
+extern void bgp_session_reset_safe(struct peer *peer, struct listnode **nnode);
+
#ifdef _FRR_ATTRIBUTE_PRINTFRR
/* clang-format off */
#pragma FRR printfrr_ext "%pBP" (struct peer *)