[bgpd] simplify peer refcounts, squash slow peer leak

2006-09-14 Paul Jakma <paul.jakma@sun.com>

	* (general) fix the peer refcount issue exposed by previous, by
	  just removing refcounting of peer threads, which is mostly
	  senseless as they're references leading from struct peer,
	  which peer_free cancels anyway. No need to muck around..
	* bgp_fsm.h: Just remove the refcounting from the various
	  TIMER/READ/WRITE/EVENT ON/OFF/ADD macros.
	* bgp_fsm.c: (bgp_stop) use BGP_EVENT_FLUSH, no refcounts attached
	  to events anymore.
	  (bgp_event) remove peer_unlock, events not refcounted.
	* bgpd.c: (peer_free) flush events before free.
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index bdb6517..cc2b2c3 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -426,7 +426,6 @@
 {
   afi_t afi;
   safi_t safi;
-  unsigned int i;
   char orf_name[BUFSIZ];
 
   /* Increment Dropped count. */
@@ -500,10 +499,8 @@
   BGP_TIMER_OFF (peer->t_asorig);
   BGP_TIMER_OFF (peer->t_routeadv);
 
-  /* Delete all existing events of the peer,
-     and corresponding peer ref-count */
-  for (i = thread_cancel_event (master, peer); i > 0; i--)
-    peer_unlock (peer); /* thread event reference */
+  /* Delete all existing events of the peer */
+  BGP_EVENT_FLUSH (peer);
   
   /* Stream reset. */
   peer->packet_size = 0;
@@ -1101,6 +1098,5 @@
       bgp_timer_set (peer);
     }
   
-  peer_unlock (peer); /* bgp-event peer reference */
   return ret;
 }