Don't have the connection freeing peers -- it's the contexts responsibility.
authorLinus Nordberg <linus@nordu.net>
Tue, 1 Mar 2011 00:00:47 +0000 (01:00 +0100)
committerLinus Nordberg <linus@nordu.net>
Tue, 1 Mar 2011 00:00:47 +0000 (01:00 +0100)
Also, let _rs_peer_destroy() free secret.

lib/conn.c
lib/radsec.c

index 3fb6a97..924c225 100644 (file)
@@ -123,7 +123,6 @@ rs_conn_disconnect (struct rs_connection *conn)
 int
 rs_conn_destroy (struct rs_connection *conn)
 {
-  struct rs_peer *p;
   int err = 0;
 
   assert (conn);
@@ -136,14 +135,7 @@ rs_conn_destroy (struct rs_connection *conn)
     }
 
   /* NOTE: conn->realm is owned by context.  */
-
-  for (p = conn->peers; p; p = p->next)
-    {
-      if (p->addr)
-       evutil_freeaddrinfo (p->addr);
-      if (p->secret)
-       rs_free (conn->ctx, p->secret);
-    }
+  /* NOTE: conn->peers is owned by context.  */
 
   if (conn->tev)
     event_free (conn->tev);
index b9c9e35..3772158 100644 (file)
@@ -120,6 +120,8 @@ _rs_peer_destroy (struct rs_peer *p)
       evutil_freeaddrinfo (p->addr);
       p->addr = NULL;
     }
+  if (p->secret)
+    rs_free (p->conn->ctx, p->secret);
   rs_free (p->conn->ctx, p);
 }