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

Reply via email to