[bgpd] Fix crash on shutdown of peer

2006-07-02 Paul Jakma <paul.jakma@sun.com>

	* bgp_fsm.c: (bgp_{stop,start}) Move clear/free of certain
	  bits of state from stop to start, as they may be used via
	  peer references on clearing queues..
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index f5f7892..770a791 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -511,25 +511,6 @@
       peer->fd = -1;
     }
 
-  /* Connection information. */
-  if (peer->su_local)
-    {
-      sockunion_free (peer->su_local);
-      peer->su_local = NULL;
-    }
-
-  if (peer->su_remote)
-    {
-      sockunion_free (peer->su_remote);
-      peer->su_remote = NULL;
-    }
-
-  /* Clear remote router-id. */
-  peer->remote_id.s_addr = 0;
-
-  /* Clear peer capability flag. */
-  peer->cap = 0;
-
   for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
     for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
       {
@@ -644,6 +625,28 @@
 {
   int status;
 
+  /* Scrub some information that might be left over from a previous,
+   * session
+   */
+  /* Connection information. */
+  if (peer->su_local)
+    {
+      sockunion_free (peer->su_local);
+      peer->su_local = NULL;
+    }
+
+  if (peer->su_remote)
+    {
+      sockunion_free (peer->su_remote);
+      peer->su_remote = NULL;
+    }
+
+  /* Clear remote router-id. */
+  peer->remote_id.s_addr = 0;
+
+  /* Clear peer capability flag. */
+  peer->cap = 0;
+    
   /* If the peer is passive mode, force to move to Active mode. */
   if (CHECK_FLAG (peer->flags, PEER_FLAG_PASSIVE))
     {