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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list