Changeset: 37e5932e9998 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=37e5932e9998
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_align.c
gdk/gdk_bat.c
gdk/gdk_bbp.c
gdk/gdk_group.c
gdk/gdk_heap.c
gdk/gdk_imprints.c
gdk/gdk_join.c
gdk/gdk_private.h
gdk/gdk_search.c
gdk/gdk_select.c
gdk/gdk_storage.c
gdk/gdk_unique.c
sql/backends/monet5/Tests/All
sql/backends/monet5/generator/generator.c
sql/test/leaks/Tests/check0_nogeom.stable.out
sql/test/leaks/Tests/check3_nogeom.stable.out
sql/test/leaks/Tests/check4_nogeom.stable.out
sql/test/leaks/Tests/check5_nogeom.stable.out
sql/test/leaks/Tests/select1_nogeom.stable.out
sql/test/leaks/Tests/select2_nogeom.stable.out
sql/test/leaks/Tests/temp2_nogeom.stable.out
sql/test/leaks/Tests/temp3_nogeom.stable.out
Branch: default
Log Message:
Merge with Oct2014 branch.
diffs (truncated from 841 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -289,7 +289,6 @@ void HEAP_free(Heap *heap, var_t block);
void HEAP_initialize(Heap *heap, size_t nbytes, size_t nprivate, int
alignment);
var_t HEAP_malloc(Heap *heap, size_t nbytes);
int HEAPextend(Heap *h, size_t size, int mayshare);
-int HEAPfree(Heap *h);
size_t HEAPmemsize(Heap *h);
size_t HEAPvmsize(Heap *h);
lng IMPSimprintsize(BAT *b);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1043,7 +1043,7 @@ typedef int (*GDKfcn) ();
* HEAPalloc (Heap *h, size_t nitems, size_t itemsize);
* @item int
* @tab
- * HEAPfree (Heap *h);
+ * HEAPfree (Heap *h, int remove);
* @item int
* @tab
* HEAPextend (Heap *h, size_t size, int mayshare);
@@ -1068,7 +1068,6 @@ typedef int (*GDKfcn) ();
* These routines should be used to alloc free or extend heaps; they
* isolate you from the different ways heaps can be accessed.
*/
-gdk_export int HEAPfree(Heap *h);
gdk_export int HEAPextend(Heap *h, size_t size, int mayshare);
gdk_export size_t HEAPvmsize(Heap *h);
gdk_export size_t HEAPmemsize(Heap *h);
@@ -1656,6 +1655,8 @@ gdk_export int BATmmap(BAT *b, int hb, i
gdk_export int BATdelete(BAT *b);
gdk_export size_t BATmemsize(BAT *b, int dirty);
+#define NOFARM (-1) /* indicate to GDKfilepath to create relative path */
+
gdk_export char *GDKfilepath(int farmid, const char *dir, const char *nme,
const char *ext);
gdk_export int GDKcreatedir(const char *nme);
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -500,7 +500,7 @@ BATmaterializeh(BAT *b)
BATsetcount(b, cnt);
/* cleanup the old heaps */
- HEAPfree(&head);
+ HEAPfree(&head, 0);
return b;
}
@@ -756,10 +756,10 @@ VIEWreset(BAT *b)
BBPreclaim(v);
if (n != NULL)
BBPunfix(n->batCacheid);
- HEAPfree(&head);
- HEAPfree(&tail);
- HEAPfree(&hh);
- HEAPfree(&th);
+ HEAPfree(&head, 0);
+ HEAPfree(&tail, 0);
+ HEAPfree(&hh, 0);
+ HEAPfree(&th, 0);
return NULL;
}
@@ -810,13 +810,13 @@ VIEWdestroy(BAT *b)
VIEWunlink(b);
if (b->htype && !b->H->heap.parentid) {
- HEAPfree(&b->H->heap);
+ HEAPfree(&b->H->heap, 0);
} else {
b->H->heap.base = NULL;
b->H->heap.filename = NULL;
}
if (b->ttype && !b->T->heap.parentid) {
- HEAPfree(&b->T->heap);
+ HEAPfree(&b->T->heap, 0);
} else {
b->T->heap.base = NULL;
b->T->heap.filename = NULL;
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -152,20 +152,20 @@ BATcreatedesc(int ht, int tt, int heapna
const char *nme = BBP_physical(bn->batCacheid);
if (ht) {
- bn->H->heap.filename = GDKfilepath(-1, NULL, nme,
"head");
+ bn->H->heap.filename = GDKfilepath(NOFARM, NULL, nme,
"head");
if (bn->H->heap.filename == NULL)
goto bailout;
}
if (tt) {
- bn->T->heap.filename = GDKfilepath(-1, NULL, nme,
"tail");
+ bn->T->heap.filename = GDKfilepath(NOFARM, NULL, nme,
"tail");
if (bn->T->heap.filename == NULL)
goto bailout;
}
if (ATOMneedheap(ht)) {
if ((bn->H->vheap = (Heap *) GDKzalloc(sizeof(Heap)))
== NULL ||
- (bn->H->vheap->filename = GDKfilepath(-1, NULL,
nme, "hheap")) == NULL)
+ (bn->H->vheap->filename = GDKfilepath(NOFARM, NULL,
nme, "hheap")) == NULL)
goto bailout;
bn->H->vheap->parentid = bn->batCacheid;
bn->H->vheap->farmid = BBPselectfarm(role, bn->htype,
varheap);
@@ -173,7 +173,7 @@ BATcreatedesc(int ht, int tt, int heapna
if (ATOMneedheap(tt)) {
if ((bn->T->vheap = (Heap *) GDKzalloc(sizeof(Heap)))
== NULL ||
- (bn->T->vheap->filename = GDKfilepath(-1, NULL,
nme, "theap")) == NULL)
+ (bn->T->vheap->filename = GDKfilepath(NOFARM, NULL,
nme, "theap")) == NULL)
goto bailout;
bn->T->vheap->parentid = bn->batCacheid;
bn->T->vheap->farmid = BBPselectfarm(role, bn->ttype,
varheap);
@@ -183,15 +183,15 @@ BATcreatedesc(int ht, int tt, int heapna
return bs;
bailout:
if (ht)
- HEAPfree(&bn->H->heap);
+ HEAPfree(&bn->H->heap, 1);
if (tt)
- HEAPfree(&bn->T->heap);
+ HEAPfree(&bn->T->heap, 1);
if (bn->H->vheap) {
- HEAPfree(bn->H->vheap);
+ HEAPfree(bn->H->vheap, 1);
GDKfree(bn->H->vheap);
}
if (bn->T->vheap) {
- HEAPfree(bn->T->vheap);
+ HEAPfree(bn->T->vheap, 1);
GDKfree(bn->T->vheap);
}
GDKfree(bs);
@@ -265,15 +265,15 @@ BATnewstorage(int ht, int tt, BUN cap, i
}
if (tt && HEAPalloc(&bn->T->heap, cap, bn->T->width) < 0) {
if (ht)
- HEAPfree(&bn->H->heap);
+ HEAPfree(&bn->H->heap, 1);
return NULL;
}
if (ATOMheap(ht, bn->H->vheap, cap) < 0) {
if (ht)
- HEAPfree(&bn->H->heap);
+ HEAPfree(&bn->H->heap, 1);
if (tt)
- HEAPfree(&bn->T->heap);
+ HEAPfree(&bn->T->heap, 1);
GDKfree(bn->H->vheap);
if (bn->T->vheap)
GDKfree(bn->T->vheap);
@@ -281,11 +281,11 @@ BATnewstorage(int ht, int tt, BUN cap, i
}
if (ATOMheap(tt, bn->T->vheap, cap) < 0) {
if (ht)
- HEAPfree(&bn->H->heap);
+ HEAPfree(&bn->H->heap, 1);
if (tt)
- HEAPfree(&bn->T->heap);
+ HEAPfree(&bn->T->heap, 1);
if (bn->H->vheap) {
- HEAPfree(bn->H->vheap);
+ HEAPfree(bn->H->vheap, 1);
GDKfree(bn->H->vheap);
}
GDKfree(bn->T->vheap);
@@ -354,7 +354,7 @@ BATattach(int tt, const char *heapfile,
if (rename(heapfile, path) < 0) {
GDKsyserror("BATattach: cannot rename heapfile\n");
GDKfree(path);
- HEAPfree(&bn->T->heap);
+ HEAPfree(&bn->T->heap, 1);
GDKfree(bs);
return NULL;
}
@@ -373,7 +373,7 @@ BATattach(int tt, const char *heapfile,
bn->T->heap.size = (size_t) st.st_size;
bn->T->heap.newstorage = bn->T->heap.storage = (bn->T->heap.size <
GDK_mmap_minsize) ? STORE_MEM : STORE_MMAP;
if (HEAPload(&bn->T->heap, BBP_physical(bn->batCacheid), "tail", TRUE)
< 0) {
- HEAPfree(&bn->T->heap);
+ HEAPfree(&bn->T->heap, 1);
GDKfree(bs);
return NULL;
}
@@ -560,20 +560,20 @@ BATclear(BAT *b, int force)
if (b->T->vheap->free > 0 &&
ATOMheap(b->ttype, &th, cap) < 0) {
if (b->H->vheap && b->H->vheap->free > 0)
- HEAPfree(&hh);
+ HEAPfree(&hh, 1);
return NULL;
}
}
assert(b->H->vheap == NULL || b->H->vheap->parentid ==
abs(b->batCacheid));
if (b->H->vheap && b->H->vheap->free > 0) {
hh.parentid = b->H->vheap->parentid;
- HEAPfree(b->H->vheap);
+ HEAPfree(b->H->vheap, 0);
*b->H->vheap = hh;
}
assert(b->T->vheap == NULL || b->T->vheap->parentid ==
abs(b->batCacheid));
if (b->T->vheap && b->T->vheap->free > 0) {
th.parentid = b->T->vheap->parentid;
- HEAPfree(b->T->vheap);
+ HEAPfree(b->T->vheap, 0);
*b->T->vheap = th;
}
} else {
@@ -632,20 +632,20 @@ BATfree(BAT *b)
HASHdestroy(b);
IMPSdestroy(b);
if (b->htype)
- HEAPfree(&b->H->heap);
+ HEAPfree(&b->H->heap, 0);
else
assert(!b->H->heap.base);
if (b->ttype)
- HEAPfree(&b->T->heap);
+ HEAPfree(&b->T->heap, 0);
else
assert(!b->T->heap.base);
if (b->H->vheap) {
assert(b->H->vheap->parentid == b->batCacheid);
- HEAPfree(b->H->vheap);
+ HEAPfree(b->H->vheap, 0);
}
if (b->T->vheap) {
assert(b->T->vheap->parentid == b->batCacheid);
- HEAPfree(b->T->vheap);
+ HEAPfree(b->T->vheap, 0);
}
b = BBP_cache(-b->batCacheid);
@@ -715,20 +715,20 @@ heapcopy(BAT *bn, char *ext, Heap *dst,
if (src->filename && src->newstorage != STORE_MEM) {
const char *nme = BBP_physical(bn->batCacheid);
- if ((dst->filename = GDKfilepath(-1, NULL, nme, ext)) == NULL)
+ if ((dst->filename = GDKfilepath(NOFARM, NULL, nme, ext)) ==
NULL)
return -1;
}
return HEAPcopy(dst, src);
}
static void
-heapfree(Heap *dst, Heap *src)
+heapmove(Heap *dst, Heap *src)
{
if (src->filename == NULL) {
src->filename = dst->filename;
dst->filename = NULL;
}
- HEAPfree(dst);
+ HEAPfree(dst, 0);
*dst = *src;
}
@@ -872,23 +872,23 @@ BATcopy(BAT *b, int ht, int tt, int writ
(b->ttype && heapcopy(bn, "tail", &bthp,
&b->T->heap) < 0) ||
(bn->H->vheap && heapcopy(bn, "hheap", &hhp,
b->H->vheap) < 0) ||
(bn->T->vheap && heapcopy(bn, "theap", &thp,
b->T->vheap) < 0)) {
- HEAPfree(&thp);
- HEAPfree(&hhp);
- HEAPfree(&bthp);
- HEAPfree(&bhhp);
+ HEAPfree(&thp, 1);
+ HEAPfree(&hhp, 1);
+ HEAPfree(&bthp, 1);
+ HEAPfree(&bhhp, 1);
BBPreclaim(bn);
return NULL;
}
/* succeeded; replace dummy small heaps by the
* real ones */
- heapfree(&bn->H->heap, &bhhp);
- heapfree(&bn->T->heap, &bthp);
+ heapmove(&bn->H->heap, &bhhp);
+ heapmove(&bn->T->heap, &bthp);
hhp.parentid = bn->batCacheid;
thp.parentid = bn->batCacheid;
if (bn->H->vheap)
- heapfree(bn->H->vheap, &hhp);
+ heapmove(bn->H->vheap, &hhp);
if (bn->T->vheap)
- heapfree(bn->T->vheap, &thp);
+ heapmove(bn->T->vheap, &thp);
/* make sure we use the correct capacity */
hcap = (BUN) (bn->htype ? bn->H->heap.size >>
bn->H->shift : 0);
@@ -2976,10 +2976,7 @@ BATassertHeadProps(BAT *b)
if (cmp == 0)
seennil = 1;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list