]> granicus.if.org Git - graphviz/commitdiff
Fix various memory leaks.
authorerg <devnull@localhost>
Fri, 22 Jun 2007 19:11:23 +0000 (19:11 +0000)
committererg <devnull@localhost>
Fri, 22 Jun 2007 19:11:23 +0000 (19:11 +0000)
lib/circogen/circularinit.c
lib/common/ns.c
lib/fdpgen/fdpinit.c
lib/twopigen/twopiinit.c

index 034179571467860f4b7c59cb071a34b52867e05b..113a0faa6b8e1f27d3d1bd207fd0f73ec8240176 100644 (file)
@@ -282,6 +282,10 @@ void circoLayout(Agraph_t * g)
            for (i = 0; i < ncc; i++)
                copyPosns(ccs[i]);
        }
+       for (i = 0; i < ncc; i++) {
+           agdelete(g, ccs[i]);
+       }
+       free(ccs);
     }
 }
 
index 6035937b6bd4603af951db79f199eac8aeff3a57..c743ea99fb835b093c72de07a449e8234c8b825f 100644 (file)
@@ -444,6 +444,17 @@ static void scan_and_normalize(void)
     }
 }
 
+static void
+freeTreeList (graph_t* g)
+{
+    node_t *n;
+    for (n = GD_nlist(G); n; n = ND_next(n)) {
+       free_list(ND_tree_in(n));
+       free_list(ND_tree_out(n));
+       ND_mark(n) = FALSE;
+    }
+}
+
 static void LR_balance(void)
 {
     int i, delta;
@@ -470,6 +481,7 @@ static void LR_balance(void)
        free_list(ND_tree_out(n));
        ND_mark(n) = FALSE;
     }
+    freeTreeList (G);
 }
 
 static void TB_balance(void)
@@ -586,15 +598,20 @@ int rank(graph_t * g, int balance, int maxiter)
     feasible = init_graph(g);
     if (!feasible)
        init_rank();
-    if (maxiter <= 0)
+    if (maxiter <= 0) {
+       freeTreeList (g);
        return 0;
+    }
 
     if ((s = agget(g, "searchsize")))
        Search_size = atoi(s);
     else
        Search_size = SEARCHSIZE;
 
-    if (feasible_tree()) return 1;
+    if (feasible_tree()) {
+       freeTreeList (g);
+       return 1;
+    }
     while ((e = leave_edge())) {
        f = enter_edge(e);
        update(e, f);
index d6563e85acbe3663d6ea65a34da56cc2aad0060e..3259057e1c228951d7d9f355de050f680f0c641e 100644 (file)
@@ -113,7 +113,6 @@ void fdp_init_node_edge(graph_t * g)
 
 static void fdp_cleanup_node(node_t * n)
 {
-    free(ND_alg(n));
     free(ND_pos(n));
     if (ND_shape(n))
        ND_shape(n)->fns->freefn(n);
@@ -173,7 +172,9 @@ void fdp_cleanup(graph_t * g)
     node_t *n;
     edge_t *e;
 
-    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
+    n = agfstnode(g);
+    free(ND_alg(n));
+    for (; n; n = agnxtnode(g, n)) {
        for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) {
            fdp_cleanup_edge(e);
        }
index cff2956769bc8e18d618125754c94e2f46c2a3d0..80d024983ac0250533d4838c92b59d4768354733 100644 (file)
@@ -130,7 +130,6 @@ void twopi_layout(Agraph_t * g)
 
 static void twopi_cleanup_node(node_t * n)
 {
-    free(ND_alg(n));
     if (ND_shape(n))
        ND_shape(n)->fns->freefn(n);
     free_label(ND_label(n));