summaryrefslogtreecommitdiff
path: root/bgpd/bgp_fsm.h
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_fsm.h')
-rw-r--r--bgpd/bgp_fsm.h17
1 files changed, 13 insertions, 4 deletions
diff --git a/bgpd/bgp_fsm.h b/bgpd/bgp_fsm.h
index e90f3b43..0a5d3715 100644
--- a/bgpd/bgp_fsm.h
+++ b/bgpd/bgp_fsm.h
@@ -43,7 +43,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#define BGP_WRITE_ON(T,F,V) \
do { \
- if (!T) \
+ if (!(T) && (peer->status != Deleted)) \
{ \
peer_lock (peer); \
THREAD_WRITE_ON(master,(T),(F),peer,(V)); \
@@ -61,7 +61,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#define BGP_TIMER_ON(T,F,V) \
do { \
- if (!T) \
+ if (!(T) && (peer->status != Deleted)) \
{ \
peer_lock (peer); \
THREAD_TIMER_ON(master,(T),(F),peer,(V)); \
@@ -79,8 +79,11 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#define BGP_EVENT_ADD(P,E) \
do { \
- peer_lock (peer); /* bgp event reference */ \
- thread_add_event (master, bgp_event, (P), (E)); \
+ if ((P)->status != Deleted) \
+ { \
+ peer_lock (peer); /* bgp event reference */ \
+ thread_add_event (master, bgp_event, (P), (E)); \
+ } \
} while (0)
#define BGP_EVENT_DELETE(P) \
@@ -90,6 +93,12 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
thread_cancel_event (master, (P)); \
} while (0)
+#define BGP_EVENT_FLUSH_ADD(P,E) \
+ do { \
+ BGP_EVENT_DELETE(P); \
+ BGP_EVENT_ADD(P,E); \
+ } while (0)
+
/* Prototypes. */
extern int bgp_event (struct thread *);
extern int bgp_stop (struct peer *peer);