mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
Fixes nasty bug in BFD.
When a BFD session is removed while being scheduled for notification, the session stays in notify list and is removed twice, which leads to a strange crash after a while.
This commit is contained in:
@@ -477,8 +477,15 @@ bfd_remove_session(struct bfd_proto *p, struct bfd_session *s)
|
|||||||
{
|
{
|
||||||
ip_addr ip = s->addr;
|
ip_addr ip = s->addr;
|
||||||
|
|
||||||
|
/* Caller should ensure that request list is empty */
|
||||||
|
|
||||||
birdloop_enter(p->loop);
|
birdloop_enter(p->loop);
|
||||||
|
|
||||||
|
/* Remove session from notify list if scheduled for notification */
|
||||||
|
/* No need for bfd_lock_sessions(), we are already protected by birdloop_enter() */
|
||||||
|
if (NODE_VALID(&s->n))
|
||||||
|
rem_node(&s->n);
|
||||||
|
|
||||||
bfd_free_iface(s->ifa);
|
bfd_free_iface(s->ifa);
|
||||||
|
|
||||||
rfree(s->tx_timer);
|
rfree(s->tx_timer);
|
||||||
|
Reference in New Issue
Block a user