From 1e0a03e9ca9f64da5d6a1e2354a04e12b31cc42a Mon Sep 17 00:00:00 2001 From: skimo Date: Sun, 15 Feb 2004 22:08:24 +0000 Subject: [PATCH] memory leaks --- barvinok.cc | 1 + ev_operations.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/barvinok.cc b/barvinok.cc index f9c455e..87a6791 100644 --- a/barvinok.cc +++ b/barvinok.cc @@ -1559,6 +1559,7 @@ out: eres->x.p = new_enode(partition, 2*nd, -1); for (int j = 0; j < nd; ++j) { EVALUE_SET_DOMAIN(eres->x.p->arr[2*j], s[j].D); + value_clear(eres->x.p->arr[2*j+1].d); eres->x.p->arr[2*j+1] = s[j].E; } delete [] s; diff --git a/ev_operations.c b/ev_operations.c index 564e16f..d966999 100644 --- a/ev_operations.c +++ b/ev_operations.c @@ -326,18 +326,21 @@ void eadd_partitions (evalue *e1,evalue *res) ++n; } if (!emptyQ(fd)) { - if (fd != EVALUE_DOMAIN(res->x.p->arr[2*i])) - Domain_Free(EVALUE_DOMAIN(res->x.p->arr[2*i])); s[n].E = res->x.p->arr[2*i+1]; s[n].D = fd; ++n; - } + } else + free_evalue_refs(&res->x.p->arr[2*i+1]); + if (fd != EVALUE_DOMAIN(res->x.p->arr[2*i])) + Domain_Free(EVALUE_DOMAIN(res->x.p->arr[2*i])); + value_clear(res->x.p->arr[2*i].d); } free(res->x.p); res->x.p = new_enode(partition, 2*n, -1); for (j = 0; j < n; ++j) { EVALUE_SET_DOMAIN(res->x.p->arr[2*j], s[j].D); + value_clear(res->x.p->arr[2*j+1].d); res->x.p->arr[2*j+1] = s[j].E; } @@ -607,12 +610,15 @@ void emul_partitions (evalue *e1,evalue *res) ++n; } Domain_Free(EVALUE_DOMAIN(res->x.p->arr[2*i])); + value_clear(res->x.p->arr[2*i].d); + free_evalue_refs(&res->x.p->arr[2*i+1]); } free(res->x.p); res->x.p = new_enode(partition, 2*n, -1); for (j = 0; j < n; ++j) { EVALUE_SET_DOMAIN(res->x.p->arr[2*j], s[j].D); + value_clear(res->x.p->arr[2*j+1].d); res->x.p->arr[2*j+1] = s[j].E; } @@ -904,6 +910,7 @@ void free_evalue_refs(evalue *e) { if (EVALUE_IS_DOMAIN(*e)) { Domain_Free(EVALUE_DOMAIN(*e)); + value_clear(e->d); return; } else if (value_pos_p(e->d)) { -- 2.11.4.GIT