(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) |

------------------------------------------------------------------------------
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