Sjoerd et al., nightly testing does not seem to confirm the problem I encounter:
http://monetdb.cwi.nl/testweb/web/status.php http://monetdb.cwi.nl/testweb/web/testgrid.php?serial=42830:c3830ea8b04f&order=platform,arch,compiler I'm investigating what is different in my case. Stefan On Fri, Jan 13, 2012 at 11:37:58PM +0100, Stefan Manegold wrote: > (on my 64-bit Fedora 14 desktop) this checkin seems cause several tests to > fail or even crash: > > > > testing status with changeset 42821:3967ec4a8aef: > > monetdb5: > !ERROR: Testing FAILED SIGNIFICANTLY (4 out of 494 tests failed) > 1 out of 494 tests ran into timeout > 3 out of 494 tests produced SIGNIFICANTLY different output > > sql: > !ERROR: Testing FAILED SIGNIFICANTLY (4 out of 1161 tests failed) > 15 out of 1161 tests could not be executed > 1 out of 1161 tests produced slightly different output > 3 out of 1161 tests produced SIGNIFICANTLY different output > > geom: > !ERROR: Testing FAILED SIGNIFICANTLY (1 out of 16 tests failed) > 1 out of 16 tests resulted in a crash > > > > testing status with changeset 42825:f15583fdc322 > > monetdb5: > !ERROR: Testing FAILED SIGNIFICANTLY (21 out of 494 tests failed) > 1 out of 494 tests ran into timeout > 20 out of 494 tests produced SIGNIFICANTLY different output > > sql: > !ERROR: Testing FAILED SIGNIFICANTLY (909 out of 1161 tests failed) > 248 out of 1161 tests could not be executed > 6 out of 1161 tests ran into timeout > 900 out of 1161 tests resulted in a crash > 3 out of 1161 tests produced SIGNIFICANTLY different output > > geom: > !ERROR: Testing FAILED SIGNIFICANTLY (16 out of 16 tests failed) > 16 out of 16 tests resulted in a crash > > > > I have not yet looked into the details. > > > Stefan > > > On Fri, Jan 13, 2012 at 06:08:12PM +0100, Sjoerd Mullender wrote: > > Changeset: f15583fdc322 for MonetDB > > URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f15583fdc322 > > Modified Files: > > clients/Tests/exports.stable.out > > gdk/gdk.mx > > gdk/gdk_atoms.mx > > monetdb5/mal/mal_atom.c > > monetdb5/mal/mal_interpreter.mx > > monetdb5/mal/mal_resolve.mx > > monetdb5/modules/atoms/blob.c > > monetdb5/modules/atoms/blob.mal > > monetdb5/modules/mal/Tests/inspect05.stable.out > > Branch: default > > Log Message: > > > > Plug memory leak. > > Variables of types other than the standard built-in types could not be > > freed since the interpreter didn't know what to do. We now have a > > new function pointer in BATatoms that the interpreter can use to > > destroy an atom. Typically the function pointer will be NULL, but for > > e.g. BLOBs it should be GDKfree. This function pointer can be set > > using the new > > command destroy() address XXX; > > construct in MAL. > > > > > > diffs (278 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 > > @@ -954,6 +954,7 @@ str BLOBblob_blob(blob **d, blob **s); > > str BLOBblob_fromstr(blob **b, str *d); > > void BLOBconvert(blob *b, int direction); > > void BLOBdel(Heap *h, var_t *index); > > +void BLOBdestroy(blob *b); > > str BLOBeoln(char *src, char *end); > > str BLOBfromblob(str *retval, blob **b); > > str BLOBfromidx(str *retval, blob **binp, int *index); > > diff --git a/gdk/gdk.mx b/gdk/gdk.mx > > --- a/gdk/gdk.mx > > +++ b/gdk/gdk.mx > > @@ -2125,6 +2125,7 @@ typedef struct { > > void (*atomConvert) (ptr v, int direction); > > int (*atomFix) (ptr atom); > > int (*atomUnfix) (ptr atom); > > + void (*atomDestroy) (ptr atom); > > > > /* varsized atom-only ADT functions */ > > var_t (*atomPut) (Heap *, var_t *off, ptr src); > > diff --git a/gdk/gdk_atoms.mx b/gdk/gdk_atoms.mx > > --- a/gdk/gdk_atoms.mx > > +++ b/gdk/gdk_atoms.mx > > @@ -2350,64 +2350,44 @@ atomDesc BATatoms[MAXATOMS] = { > > (int (*)(ptr, ptr)) lngCmp, > > (BUN (*)(ptr)) lngHash, 0, > > #endif > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"bit", TYPE_chr, 1, sizeof(bit), sizeof(bit), 0, 0, (ptr) &chr_nil, > > (int (*)(str, int *, ptr *)) bitFromStr, (int (*)(str *, int *, ptr)) > > bitToStr, > > (void *(*)(void *, stream *, size_t)) bitRead, (int (*)(void *, stream > > *, size_t)) bitWrite, > > (int (*)(ptr, ptr)) chrCmp, > > (BUN (*)(ptr)) chrHash, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"chr", TYPE_chr, 1, sizeof(chr), sizeof(chr), 0, 0, (ptr) &chr_nil, > > (int (*)(str, int *, ptr *)) chrFromStr, (int (*)(str *, int *, ptr)) > > chrToStr, > > (void *(*)(void *, stream *, size_t)) chrRead, (int (*)(void *, stream > > *, size_t)) chrWrite, > > (int (*)(ptr, ptr)) chrCmp, > > (BUN (*)(ptr)) chrHash, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"bte", TYPE_bte, 1, sizeof(bte), sizeof(bte), 0, 0, (ptr) &bte_nil, > > (int (*)(str, int *, ptr *)) bteFromStr, (int (*)(str *, int *, ptr)) > > bteToStr, > > (void *(*)(void *, stream *, size_t)) bteRead, (int (*)(void *, stream > > *, size_t)) bteWrite, > > (int (*)(ptr, ptr)) bteCmp, > > (BUN (*)(ptr)) bteHash, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"sht", TYPE_sht, 1, sizeof(sht), sizeof(sht), 0, 0, (ptr) &sht_nil, > > (int (*)(str, int *, ptr *)) shtFromStr, (int (*)(str *, int *, ptr)) > > shtToStr, > > (void *(*)(void *, stream *, size_t)) shtRead, (int (*)(void *, stream > > *, size_t)) shtWrite, > > (int (*)(ptr, ptr)) shtCmp, > > (BUN (*)(ptr)) shtHash, (void (*)(ptr, int)) shtConvert, > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"BAT", TYPE_int, 1, sizeof(bat), sizeof(bat), 0, 0, (ptr) &int_nil, > > (int (*)(str, int *, ptr *)) batFromStr, (int (*)(str *, int *, ptr)) > > batToStr, > > (void *(*)(void *, stream *, size_t)) batRead, (int (*)(void *, stream > > *, size_t)) batWrite, > > (int (*)(ptr, ptr)) intCmp, > > (BUN (*)(ptr)) intHash, (void (*)(ptr, int)) intConvert, > > (int (*)(ptr)) batFix, (int (*)(ptr)) batUnfix, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0}, > > {"int", TYPE_int, 1, sizeof(int), sizeof(int), 0, 0, (ptr) &int_nil, > > (int (*)(str, int *, ptr *)) intFromStr, (int (*)(str *, int *, ptr)) > > intToStr, > > (void *(*)(void *, stream *, size_t)) intRead, (int (*)(void *, stream > > *, size_t)) intWrite, > > (int (*)(ptr, ptr)) intCmp, > > (BUN (*)(ptr)) intHash, (void (*)(ptr, int)) intConvert, > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"oid", > > #if SIZEOF_OID == SIZEOF_INT > > TYPE_int, 1, sizeof(oid), sizeof(oid), 0, 0, (ptr) &int_nil, > > @@ -2422,10 +2402,7 @@ atomDesc BATatoms[MAXATOMS] = { > > (int (*)(ptr, ptr)) lngCmp, > > (BUN (*)(ptr)) lngHash, (void (*)(ptr, int)) lngConvert, > > #endif > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"wrd", > > #if SIZEOF_WRD == SIZEOF_INT > > TYPE_int, 1, sizeof(wrd), sizeof(wrd), 0, 0, (ptr) &int_nil, > > @@ -2440,10 +2417,7 @@ atomDesc BATatoms[MAXATOMS] = { > > (int (*)(ptr, ptr)) lngCmp, > > (BUN (*)(ptr)) lngHash, (void (*)(ptr, int)) lngConvert, > > #endif > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"ptr", > > #if SIZEOF_VOID_P == SIZEOF_INT > > TYPE_ptr, 1, sizeof(ptr), sizeof(ptr), 0, 0, (ptr) &ptr_nil, > > @@ -2458,43 +2432,31 @@ atomDesc BATatoms[MAXATOMS] = { > > (int (*)(ptr, ptr)) lngCmp, > > (BUN (*)(ptr)) lngHash, (void (*)(ptr, int)) lngConvert, > > #endif > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"flt", TYPE_flt, 1, sizeof(flt), sizeof(flt), 0, 0, (ptr) &flt_nil, > > (int (*)(str, int *, ptr *)) fltFromStr, (int (*)(str *, int *, ptr)) > > fltToStr, > > (void *(*)(void *, stream *, size_t)) fltRead, (int (*)(void *, stream > > *, size_t)) fltWrite, > > (int (*)(ptr, ptr)) fltCmp, > > (BUN (*)(ptr)) intHash, (void (*)(ptr, int)) intConvert, > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"dbl", TYPE_dbl, 1, sizeof(dbl), sizeof(dbl), 0, 0, (ptr) &dbl_nil, > > (int (*)(str, int *, ptr *)) dblFromStr, (int (*)(str *, int *, ptr)) > > dblToStr, > > (void *(*)(void *, stream *, size_t)) dblRead, (int (*)(void *, stream > > *, size_t)) dblWrite, > > (int (*)(ptr, ptr)) dblCmp, > > (BUN (*)(ptr)) lngHash, (void (*)(ptr, int)) lngConvert, > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"lng", TYPE_lng, 1, sizeof(lng), sizeof(lng), 0, 0, (ptr) &lng_nil, > > (int (*)(str, int *, ptr *)) lngFromStr, (int (*)(str *, int *, ptr)) > > lngToStr, > > (void *(*)(void *, stream *, size_t)) lngRead, (int (*)(void *, stream > > *, size_t)) lngWrite, > > (int (*)(ptr, ptr)) lngCmp, > > (BUN (*)(ptr)) lngHash, (void (*)(ptr, int)) lngConvert, > > - 0, 0, > > - 0, 0, > > - 0, 0, > > - 0, 0}, > > + 0, 0, 0, 0, 0, 0, 0, 0, 0}, > > {"str", TYPE_str, 1, sizeof(var_t), sizeof(var_t), 0, 1, (ptr) str_nil, > > (int (*)(str, int *, ptr *)) strFromStr, (int (*)(str *, int *, ptr)) > > strToStr, > > (void *(*)(void *, stream *, size_t)) strRead, (int (*)(void *, stream > > *, size_t)) strWrite, > > (int (*)(ptr, ptr)) strCmp, > > (BUN (*)(ptr)) strHash, 0, > > - 0, 0, > > + 0, 0, GDKfree, > > (var_t (*)(Heap *, var_t *, ptr)) strPut, 0, > > (int (*)(ptr)) strLen, strHeap, > > (void (*)(Heap *, int)) 0, 0}, > > diff --git a/monetdb5/mal/mal_atom.c b/monetdb5/mal/mal_atom.c > > --- a/monetdb5/mal/mal_atom.c > > +++ b/monetdb5/mal/mal_atom.c > > @@ -118,6 +118,11 @@ int malAtomProperty(MalBlkPtr mb, InstrP > > setAtomName(pci); > > return 1; > > } > > + if (idcmp("destroy", name) == 0 && pci->argc == 1) { > > + BATatoms[tpe].atomDestroy = (void (*)(void *))pci->fcn; > > + setAtomName(pci); > > + return 1; > > + } > > break; > > case 'c': > > if (idcmp("cmp", name) == 0 && pci->argc == 1) { > > diff --git a/monetdb5/mal/mal_interpreter.mx > > b/monetdb5/mal/mal_interpreter.mx > > --- a/monetdb5/mal/mal_interpreter.mx > > +++ b/monetdb5/mal/mal_interpreter.mx > > @@ -2442,9 +2442,7 @@ void garbageElement(Client cntxt, ValPtr > > v->val.sval = NULL; > > } > > v->len = 0; > > - return; > > - } > > - if (v->vtype == TYPE_bat) { > > + } else if (v->vtype == TYPE_bat) { > > /* > > * @- > > * All operations are responsible to properly set the > > @@ -2466,6 +2464,8 @@ void garbageElement(Client cntxt, ValPtr > > if (cntxt && cntxt->flags & bigfootFlag) > > updateBigFoot(cntxt, bid, FALSE); > > BBPdecref(bid, TRUE); > > + } else if (BATatoms[v->vtype].atomDestroy) { > > + (*BATatoms[v->vtype].atomDestroy)(v->val.pval); > > } > > } > > /* > > diff --git a/monetdb5/mal/mal_resolve.mx b/monetdb5/mal/mal_resolve.mx > > --- a/monetdb5/mal/mal_resolve.mx > > +++ b/monetdb5/mal/mal_resolve.mx > > @@ -529,7 +529,8 @@ findFunctionType(Module scope, MalBlkPtr > > isaBatType(@1) || > > findGDKtype(@1) == TYPE_str || > > (!isPolyType(@1) && @1 < TYPE_any && > > - @1 >= 0 && ATOMstorage(@1) == TYPE_str)) { > > + @1 >= 0 && (ATOMstorage(@1) == TYPE_str || > > + BATatoms[@1].atomDestroy))) { > > getInstrPtr(@3, 0)->gc |= GARBAGECONTROL; > > setVarCleanup(mb, getArg(p, @2)); > > p->gc |= GARBAGECONTROL; > > @@ -783,7 +784,9 @@ void typeChecker(Module scope, MalBlkPtr > > int tpe = getArgType(mb,p,k); > > if (findGDKtype(tpe) == TYPE_bat || > > findGDKtype(tpe) == TYPE_str || > > - (!isPolyType(tpe) && tpe< TYPE_any && ATOMstorage(tpe) > > == TYPE_str)) > > + (!isPolyType(tpe) && tpe< TYPE_any && > > + (ATOMstorage(tpe) == TYPE_str || > > + BATatoms[tpe].atomDestroy))) > > setVarCleanup(mb,getArg(p,k)); > > } > > } > > diff --git a/monetdb5/modules/atoms/blob.c b/monetdb5/modules/atoms/blob.c > > --- a/monetdb5/modules/atoms/blob.c > > +++ b/monetdb5/modules/atoms/blob.c > > @@ -68,6 +68,7 @@ blob_export int BLOBnitems(int *ret, blo > > blob_export int BLOBget(Heap *h, int *bun, int *l, blob **val); > > blob_export blob * BLOBread(blob *a, stream *s, size_t cnt); > > blob_export int BLOBwrite(blob *a, stream *s, size_t cnt); > > +blob_export void BLOBdestroy(blob *b); > > > > blob_export str BLOBblob_blob(blob **d, blob **s); > > blob_export str BLOBblob_fromstr(blob **b, str *d); > > @@ -741,6 +742,12 @@ BLOBheap(Heap *heap, size_t capacity) > > blob_heap(heap, capacity); > > } > > > > +void > > +BLOBdestroy(blob *b) > > +{ > > + GDKfree(b); > > +} > > + > > var_t > > BLOBput(Heap *h, var_t *bun, blob *val) > > { > > diff --git a/monetdb5/modules/atoms/blob.mal > > b/monetdb5/modules/atoms/blob.mal > > --- a/monetdb5/modules/atoms/blob.mal > > +++ b/monetdb5/modules/atoms/blob.mal > > @@ -31,6 +31,7 @@ command put() address BLOBput; > > command del() address BLOBdel; > > command length() address BLOBlength; > > command heap() address BLOBheap; > > +command destroy() address BLOBdestroy; > > > > command blob(s:blob):blob > > address BLOBblob_blob > > diff --git a/monetdb5/modules/mal/Tests/inspect05.stable.out > > b/monetdb5/modules/mal/Tests/inspect05.stable.out > > --- a/monetdb5/modules/mal/Tests/inspect05.stable.out > > +++ b/monetdb5/modules/mal/Tests/inspect05.stable.out > > @@ -3399,6 +3399,7 @@ end main; > > [ "blob", "command", "blob", "(s:str):blob > > ", > > "BLOBblob_fromstr;" > > ] > > [ "blob", "command", "blob", > > "(s:blob):blob ", > > > > "BLOBblob_blob;" ] > > [ "#convert", "command", "blob", > > "():void ", > > "BLOBconvert;" > > ] > > +[ "#destroy", "command", "blob", > > "():void ", > > "BLOBdestroy;" > > ] > > [ "#del", "command", "blob", "():void ", > > > > "BLOBdel;" > > ] > > [ "#fromstr", "command", "blob", > > "():void ", > > "BLOBfromstr;" > > ] > > [ "#heap", "command", "blob", "():void ", > > > > "BLOBheap;" > > ] > > _______________________________________________ > > Checkin-list mailing list > > checkin-l...@monetdb.org > > http://mail.monetdb.org/mailman/listinfo/checkin-list > > -- > | Stefan.Manegold @ CWI.nl | DB Architectures (INS1) | > | http://CWI.nl/~manegold/ | Science Park 123 (L321) | > | Tel.: +31 (0)20 592-4212 | 1098 XG Amsterdam (NL) | > _______________________________________________ > Checkin-list mailing list > checkin-l...@monetdb.org > http://mail.monetdb.org/mailman/listinfo/checkin-list -- | Stefan.Manegold @ CWI.nl | DB Architectures (INS1) | | http://CWI.nl/~manegold/ | Science Park 123 (L321) | | Tel.: +31 (0)20 592-4212 | 1098 XG Amsterdam (NL) | ------------------------------------------------------------------------------ RSA(R) Conference 2012 Mar 27 - Feb 2 Save $400 by Jan. 27 Register now! http://p.sf.net/sfu/rsa-sfdev2dev2 _______________________________________________ Monetdb-developers mailing list Monetdb-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/monetdb-developers