diff options
Diffstat (limited to 'bgpd/bgp_fsm.h')
-rw-r--r-- | bgpd/bgp_fsm.h | 72 |
1 files changed, 62 insertions, 10 deletions
diff --git a/bgpd/bgp_fsm.h b/bgpd/bgp_fsm.h index db4a915a..e90f3b43 100644 --- a/bgpd/bgp_fsm.h +++ b/bgpd/bgp_fsm.h @@ -23,20 +23,72 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #define _QUAGGA_BGP_FSM_H /* Macro for BGP read, write and timer thread. */ -#define BGP_READ_ON(T,F,V) THREAD_READ_ON(master,T,F,peer,V) -#define BGP_READ_OFF(X) THREAD_READ_OFF(X) +#define BGP_READ_ON(T,F,V) \ + do { \ + if (!T) \ + { \ + peer_lock (peer); \ + THREAD_READ_ON(master,T,F,peer,V); \ + } \ + } while (0) -#define BGP_WRITE_ON(T,F,V) THREAD_WRITE_ON(master,T,F,peer,V) -#define BGP_WRITE_OFF(X) THREAD_WRITE_OFF(X) +#define BGP_READ_OFF(T) \ + do { \ + if (T) \ + { \ + peer_unlock (peer); \ + THREAD_READ_OFF(T); \ + } \ + } while (0) -#define BGP_TIMER_ON(T,F,V) THREAD_TIMER_ON(master,T,F,peer,V) -#define BGP_TIMER_OFF(X) THREAD_TIMER_OFF(X) +#define BGP_WRITE_ON(T,F,V) \ + do { \ + if (!T) \ + { \ + peer_lock (peer); \ + THREAD_WRITE_ON(master,(T),(F),peer,(V)); \ + } \ + } while (0) + +#define BGP_WRITE_OFF(T) \ + do { \ + if (T) \ + { \ + peer_unlock (peer); \ + THREAD_WRITE_OFF(T); \ + } \ + } while (0) -#define BGP_EVENT_ADD(P,E) \ - thread_add_event (master, bgp_event, (P), (E)) +#define BGP_TIMER_ON(T,F,V) \ + do { \ + if (!T) \ + { \ + peer_lock (peer); \ + THREAD_TIMER_ON(master,(T),(F),peer,(V)); \ + } \ + } while (0) -#define BGP_EVENT_DELETE(P) \ - thread_cancel_event (master, (P)) +#define BGP_TIMER_OFF(T) \ + do { \ + if (T) \ + { \ + peer_unlock (peer); \ + THREAD_TIMER_OFF(T); \ + } \ + } while (0) + +#define BGP_EVENT_ADD(P,E) \ + do { \ + peer_lock (peer); /* bgp event reference */ \ + thread_add_event (master, bgp_event, (P), (E)); \ + } while (0) + +#define BGP_EVENT_DELETE(P) \ + do { \ + peer_unlock (peer); /* bgp event peer reference */ \ + assert (peer); \ + thread_cancel_event (master, (P)); \ + } while (0) /* Prototypes. */ extern int bgp_event (struct thread *); |