[bgpd] Bug #302 fixes. ClearingCompleted event gets flushed, leaving peers stuck in Clearing.
2006-10-14 Paul Jakma <paul.jakma@sun.com>
* bgp_fsm.h: Remove BGP_EVENT_FLUSH_ADD, dangerous and not
needed.
* bgp_fsm.c: (bgp_stop) Move BGP_EVENT_FLUSH to the top of the
of the function, otherwise it could flush a ClearingCompleted
event, bug #302.
* bgp_packet.c: Replace all BGP_EVENT_FLUSH_ADD with
BGP_EVENT_ADD, fixing bug #302.
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index da59d32..cf6d00f 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -637,7 +637,7 @@
if (write_errno == EWOULDBLOCK || write_errno == EAGAIN)
break;
- BGP_EVENT_FLUSH_ADD (peer, TCP_fatal_error);
+ BGP_EVENT_ADD (peer, TCP_fatal_error);
return 0;
}
if (num != writenum)
@@ -672,7 +672,7 @@
peer->v_start = (60 * 2);
/* Flush any existing events */
- BGP_EVENT_FLUSH_ADD (peer, BGP_Stop);
+ BGP_EVENT_ADD (peer, BGP_Stop);
return 0;
case BGP_MSG_KEEPALIVE:
peer->keepalive_out++;
@@ -717,7 +717,7 @@
ret = writen (peer->fd, STREAM_DATA (s), stream_get_endp (s));
if (ret <= 0)
{
- BGP_EVENT_FLUSH_ADD (peer, TCP_fatal_error);
+ BGP_EVENT_ADD (peer, TCP_fatal_error);
return 0;
}
@@ -737,7 +737,7 @@
if (peer->v_start >= (60 * 2))
peer->v_start = (60 * 2);
- BGP_EVENT_FLUSH_ADD (peer, BGP_Stop);
+ BGP_EVENT_ADD (peer, BGP_Stop);
return 0;
}