]> granicus.if.org Git - graphviz/commitdiff
memory leaks
authorDonald Caldwell <dfwc@research.att.com>
Fri, 30 Sep 2011 21:46:19 +0000 (17:46 -0400)
committerDonald Caldwell <dfwc@research.att.com>
Fri, 30 Sep 2011 21:46:19 +0000 (17:46 -0400)
freed memory for cluster and clusterp at end of Multilevel_coarsen_internal
commented out dtsearch call in xlhdxload
added xlhdxunload in xlabels.c to clear node memory

lib/label/xlabels.c
lib/sfdpgen/Multilevel.c

index 3fdc33eef4b73f1a24019bbf7bbc07fc630ec994..24d792866815e363c66d861e05e649a3c0a4a3a4 100644 (file)
@@ -596,14 +596,33 @@ static int xlhdxload(XLabels_t * xlp)
 
        hp->key = hd_hil_s_from_xy(pi, order);
 
-       if (dtsearch(xlp->hdx, hp) != 0)
+#if 0
+       if (dtsearch(xlp->hdx, hp) != 0) {
+           free(hp);
            continue;
+       }
+#endif
        if (!(dtinsert(xlp->hdx, hp)))
            return -1;
     }
     return 0;
 }
 
+static void xlhdxunload(XLabels_t * xlp)
+{
+  int size=dtsize(xlp->hdx), freed=0;
+  while(dtsize(xlp->hdx) ) {
+    Void_t*vp=dtfinger(xlp->hdx);
+    assert(vp);
+    if(vp) {
+      dtdetach(xlp->hdx, vp);
+      free(vp);
+      freed++;
+    }
+  }
+  assert(size==freed);
+}
+
 static int xlspdxload(XLabels_t * xlp)
 {
     HDict_t *op=0;
@@ -622,6 +641,7 @@ static int xlinitialize(XLabels_t * xlp)
        return r;
     if ((r = xlspdxload(xlp)) < 0)
        return r;
+    xlhdxunload(xlp);
     return dtclose(xlp->hdx);
 }
 
index c30d528950f7f3ac8d8d9b7d6b03f0ccfc6beb24..6e0df6189bd4e458150193a9c09d2d6b86ac2c44 100644 (file)
@@ -953,7 +953,7 @@ static void Multilevel_coarsen_internal(SparseMatrix A, SparseMatrix *cA, Sparse
   real *val = NULL;
   SparseMatrix B = NULL;
   int *vset = NULL, nvset, ncov, j;
-  int *cluster, *clusterp, ncluster;
+  int *cluster=NULL, *clusterp=NULL, ncluster;
 
   assert(A->m == A->n);
   *cA = NULL;
@@ -1193,6 +1193,9 @@ static void Multilevel_coarsen_internal(SparseMatrix A, SparseMatrix *cA, Sparse
   if (jcn) FREE(jcn);
   if (val) FREE(val);
   if (B) SparseMatrix_delete(B);
+
+  if(cluster) FREE(cluster);
+  if(clusterp) FREE(clusterp);
 }
 
 void Multilevel_coarsen(SparseMatrix A, SparseMatrix *cA, SparseMatrix D, SparseMatrix *cD, real *node_wgt, real **cnode_wgt,