Changeset: c36d3edd1570 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c36d3edd1570
Added Files:
        sql/backends/monet5/Tests/pyapi30.sql
        sql/backends/monet5/Tests/pyapi30.stable.err
        sql/backends/monet5/Tests/pyapi30.stable.out
Modified Files:
        clients/mapiclient/mclient.c
        gdk/gdk.h
        monetdb5/extras/pyapi/pyapi.c
        monetdb5/mal/mal_factory.c
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_recycle.c
        monetdb5/modules/mal/pcre.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_pipes.c
        monetdb5/optimizer/optimizer.c
        monetdb5/optimizer/optimizer_private.h
        sql/server/rel_select.c
        sql/server/rel_select.h
        sql/server/rel_semantic.c
        sql/server/rel_updates.c
        sql/server/sql_mvc.c
        sql/server/sql_parser.y
        sql/storage/bat/bat_storage.c
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1.stable.out.int128
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check2.stable.out.int128
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check3.stable.out.int128
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check4.stable.out.int128
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/check5.stable.out.int128
Branch: jit
Log Message:

Merge with default


diffs (truncated from 1294 to 300 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -3322,6 +3322,7 @@ main(int argc, char **argv)
        if (command != NULL) {
 #ifdef HAVE_ICONV
                iconv_t cd_in;
+               int free_command = 0;
 
                if (encoding != NULL &&
                    (cd_in = iconv_open("utf-8", encoding)) != (iconv_t) -1) {
@@ -3331,6 +3332,7 @@ main(int argc, char **argv)
                        int factor = 4;
                        size_t tolen = factor * fromlen + 1;
                        char *to = malloc(tolen);
+                       free_command = 1;
 
                  try_again:
                        command = to;
@@ -3367,6 +3369,10 @@ main(int argc, char **argv)
                timerStart();
                c = doRequest(mid, command);
                timerEnd();
+#ifdef HAVE_ICONV
+               if (free_command)
+                       free(command);
+#endif
        }
 
        if (optind < argc) {
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1293,7 +1293,6 @@ gdk_export bte ATOMelmshift(int sz);
 #define Treplacevalue(b, p, v)         HTreplacevalue(b, p, v, T)
 #define HTfastins_nocheck(b, p, v, s, HT)                      \
        do {                                                    \
-               assert((b)->HT->width == (s));                  \
                (b)->HT->heap.free += (s);                      \
                (b)->HT->heap.dirty |= (s) != 0;                \
                HTputvalue((b), HT##loc((b), (p)), (v), 0, HT); \
diff --git a/monetdb5/extras/pyapi/pyapi.c b/monetdb5/extras/pyapi/pyapi.c
--- a/monetdb5/extras/pyapi/pyapi.c
+++ b/monetdb5/extras/pyapi/pyapi.c
@@ -150,8 +150,10 @@ static bool enable_zerocopy_output = tru
                     bat->T->nil = 1;                                           
                                         \
                 }                                                              
                                         \
             }                                                                  
                                         \
+            bat->T->nonil = 1 - bat->T->nil;                                   
                                         \
+        } else {                                                               
                                         \
+            bat->T->nil = 0; bat->T->nonil = 0;                                
                                         \
         }                                                                      
                                         \
-        bat->T->nonil = 1 - bat->T->nil;                                       
                                         \
         /*When we create a BAT a small part of memory is allocated, free it*/  
                                         \
         GDKfree(bat->T->heap.base);                                            
                                         \
         bat->T->heap.base = &data[(index_offset * ret->count) * 
ret->memory_size];                                      \
@@ -194,8 +196,10 @@ static bool enable_zerocopy_output = tru
                     bat->T->nil = 1;                                           
                                         \
                 }                                                              
                                         \
             }                                                                  
                                         \
+            bat->T->nonil = 1 - bat->T->nil;                                   
                                         \
+        } else {                                                               
                                         \
+            bat->T->nil = 0; bat->T->nonil = 0;                                
                                         \
         }                                                                      
                                         \
-        bat->T->nonil = 1 - bat->T->nil;                                       
                                         \
         /*When we create a BAT a small part of memory is allocated, free it*/  
                                         \
         GDKfree(bat->T->heap.base);                                            
                                         \
         bat->T->heap.base = &data[(index_offset * ret->count) * 
ret->memory_size];                                      \
@@ -372,7 +376,8 @@ Array of type %s no copying will be need
                     goto wrapup;                                               
                                                                                
\
             }                                                                  
                                                                                
\
             bat->T->nonil = 1 - bat->T->nil;                                   
                                                                                
\
-            BATsetcount(bat, (BUN) ret->count);                                
                                                                                
      \
+            if (!mask) { bat->T->nil = 0; bat->T->nonil = 0; }                 
                                                                                
\
+            BATsetcount(bat, (BUN) ret->count);                                
                                                                                
\
             BATsettrivprop(bat);                                               
                                                                                
\
         }                                                                      
                                                                                
\
     }
diff --git a/monetdb5/mal/mal_factory.c b/monetdb5/mal/mal_factory.c
--- a/monetdb5/mal/mal_factory.c
+++ b/monetdb5/mal/mal_factory.c
@@ -382,13 +382,12 @@ void mal_factory_reset(void)
                        /* MSresetVariables(mb, pl->stk, 0);*/
                        /* freeStack(pl->stk); there may be a reference?*/
                        /* we are inside the body of the factory and about to 
return */
-                       pl->factory = 0;
-                       if (pl->stk)
+                       if (pl->stk) {
                                pl->stk->keepAlive = FALSE;
-                       if ( pl->stk) {
-                               //garbageCollector(cntxt, mb, pl->stk,TRUE);
+                               garbageCollector(NULL, pl->factory, 
pl->stk,TRUE);
                                GDKfree(pl->stk);
                        }
+                       pl->factory = 0;
                        pl->stk=0;
                        pl->pc = 0;
                        pl->inuse = 0;
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -724,11 +724,13 @@ str runMALsequence(Client cntxt, MalBlkP
                                        nstk->up = stk;
                                        if (nstk->calldepth > 256) {
                                                ret= createException(MAL, 
"mal.interpreter", MAL_CALLDEPTH_FAIL);
+                                               GDKfree(nstk);
                                                break;
                                        }
                                        if ((unsigned)nstk->stkdepth > 
THREAD_STACK_SIZE / sizeof(mb->var[0]) / 4 && THRhighwater()){
                                                /* we are running low on stack 
space */
                                                ret= createException(MAL, 
"mal.interpreter", MAL_STACK_FAIL);
+                                               GDKfree(nstk);
                                                break;
                                        }
 
@@ -1424,8 +1426,10 @@ void garbageCollector(Client cntxt, MalB
        ValPtr v;
 
 #ifdef STACKTRACE
-       mnstr_printf(cntxt->fdout, "#--->stack before garbage collector\n");
-       printStack(cntxt->fdout, mb, stk, 0);
+       if (cntxt) {
+               mnstr_printf(cntxt->fdout, "#--->stack before garbage 
collector\n");
+               printStack(cntxt->fdout, mb, stk, 0);
+       }
 #endif
        for (k = 0; k < mb->vtop; k++) {
                if (isVarCleanup(mb, k) && (flag || isTmpVar(mb, k))) {
@@ -1435,8 +1439,10 @@ void garbageCollector(Client cntxt, MalB
                }
        }
 #ifdef STACKTRACE
-       mnstr_printf(cntxt->fdout, "#-->stack after garbage collector\n");
-       printStack(cntxt->fdout, mb, stk, 0);
+       if (cntxt) {
+               mnstr_printf(cntxt->fdout, "#-->stack after garbage 
collector\n");
+               printStack(cntxt->fdout, mb, stk, 0);
+       }
 #else
        (void)cntxt;
 #endif
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -626,9 +626,11 @@ static BAT *TRACE_id_stmt = 0;
 int
 TRACEtable(BAT **r)
 {
-       if (TRACE_init == 0)
+       MT_lock_set(&mal_profileLock);
+       if (TRACE_init == 0) {
+               MT_lock_unset(&mal_profileLock);
                return -1;       /* not initialized */
-       MT_lock_set(&mal_profileLock);
+       }
        r[0] = COLcopy(TRACE_id_event, TRACE_id_event->ttype, 0, TRANSIENT);
        r[1] = COLcopy(TRACE_id_time, TRACE_id_time->ttype, 0, TRANSIENT);
        r[2] = COLcopy(TRACE_id_pc, TRACE_id_pc->ttype, 0, TRANSIENT);
@@ -649,35 +651,39 @@ TRACEtable(BAT **r)
 BAT *
 getTrace(const char *nme)
 {
-       if (TRACE_init == 0)
-               return NULL;
-       if (strcmp(nme, "event") == 0)
-               return COLcopy(TRACE_id_event, TRACE_id_event->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "time") == 0)
-               return COLcopy(TRACE_id_time, TRACE_id_time->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "pc") == 0)
-               return COLcopy(TRACE_id_pc, TRACE_id_pc->ttype, 0, TRANSIENT);
-       if (strcmp(nme, "thread") == 0)
-               return COLcopy(TRACE_id_thread, TRACE_id_thread->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "usec") == 0)
-               return COLcopy(TRACE_id_ticks, TRACE_id_ticks->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "rssMB") == 0)
-               return COLcopy(TRACE_id_rssMB, TRACE_id_rssMB->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "tmpspace") == 0)
-               return COLcopy(TRACE_id_tmpspace, TRACE_id_tmpspace->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "reads") == 0)
-               return COLcopy(TRACE_id_inblock, TRACE_id_inblock->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "writes") == 0)
-               return COLcopy(TRACE_id_oublock, TRACE_id_oublock->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "minflt") == 0)
-               return COLcopy(TRACE_id_minflt, TRACE_id_minflt->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "majflt") == 0)
-               return COLcopy(TRACE_id_majflt, TRACE_id_majflt->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "nvcsw") == 0)
-               return COLcopy(TRACE_id_nvcsw, TRACE_id_nvcsw->ttype, 0, 
TRANSIENT);
-       if (strcmp(nme, "stmt") == 0)
-               return COLcopy(TRACE_id_stmt, TRACE_id_stmt->ttype, 0, 
TRANSIENT);
-       return NULL;
+       BAT *bn = NULL;
+
+       MT_lock_set(&mal_profileLock);
+       if (TRACE_init) {
+               if (strcmp(nme, "event") == 0)
+                       bn = COLcopy(TRACE_id_event, TRACE_id_event->ttype, 0, 
TRANSIENT);
+               else if (strcmp(nme, "time") == 0)
+                       bn = COLcopy(TRACE_id_time, TRACE_id_time->ttype, 0, 
TRANSIENT);
+               else if (strcmp(nme, "pc") == 0)
+                       bn = COLcopy(TRACE_id_pc, TRACE_id_pc->ttype, 0, 
TRANSIENT);
+               else if (strcmp(nme, "thread") == 0)
+                       bn = COLcopy(TRACE_id_thread, TRACE_id_thread->ttype, 
0, TRANSIENT);
+               else if (strcmp(nme, "usec") == 0)
+                       bn = COLcopy(TRACE_id_ticks, TRACE_id_ticks->ttype, 0, 
TRANSIENT);
+               else if (strcmp(nme, "rssMB") == 0)
+                       bn = COLcopy(TRACE_id_rssMB, TRACE_id_rssMB->ttype, 0, 
TRANSIENT);
+               else if (strcmp(nme, "tmpspace") == 0)
+                       bn = COLcopy(TRACE_id_tmpspace, 
TRACE_id_tmpspace->ttype, 0, TRANSIENT);
+               else if (strcmp(nme, "reads") == 0)
+                       bn = COLcopy(TRACE_id_inblock, TRACE_id_inblock->ttype, 
0, TRANSIENT);
+               else if (strcmp(nme, "writes") == 0)
+                       bn = COLcopy(TRACE_id_oublock, TRACE_id_oublock->ttype, 
0, TRANSIENT);
+               else if (strcmp(nme, "minflt") == 0)
+                       bn = COLcopy(TRACE_id_minflt, TRACE_id_minflt->ttype, 
0, TRANSIENT);
+               else if (strcmp(nme, "majflt") == 0)
+                       bn = COLcopy(TRACE_id_majflt, TRACE_id_majflt->ttype, 
0, TRANSIENT);
+               else if (strcmp(nme, "nvcsw") == 0)
+                       bn = COLcopy(TRACE_id_nvcsw, TRACE_id_nvcsw->ttype, 0, 
TRANSIENT);
+               else if (strcmp(nme, "stmt") == 0)
+                       bn = COLcopy(TRACE_id_stmt, TRACE_id_stmt->ttype, 0, 
TRANSIENT);
+       }
+       MT_lock_unset(&mal_profileLock);
+       return bn;
 }
 
 static BAT *
@@ -731,9 +737,11 @@ initTrace(void)
 {
        int ret = -1;
 
-       if (TRACE_init)
+       MT_lock_set(&mal_contextLock);
+       if (TRACE_init) {
+               MT_lock_unset(&mal_contextLock);
                return 0;       /* already initialized */
-       MT_lock_set(&mal_contextLock);
+       }
        TRACE_id_event = TRACEcreate("id", "event", TYPE_int);
        TRACE_id_time = TRACEcreate("id", "time", TYPE_str);
        // TODO split pc into its components fcn,pc,tag
@@ -774,23 +782,25 @@ initTrace(void)
 void
 clearTrace(void)
 {
-       if (TRACE_init == 0)
+       MT_lock_set(&mal_contextLock);
+       if (TRACE_init == 0) {
+               MT_lock_unset(&mal_contextLock);
                return;     /* not initialized */
-       MT_lock_set(&mal_contextLock);
+       }
        /* drop all trace tables */
-       BBPclear(TRACE_id_event->batCacheid);
-       BBPclear(TRACE_id_time->batCacheid);
-       BBPclear(TRACE_id_pc->batCacheid);
-       BBPclear(TRACE_id_thread->batCacheid);
-       BBPclear(TRACE_id_ticks->batCacheid);
-       BBPclear(TRACE_id_rssMB->batCacheid);
-       BBPclear(TRACE_id_tmpspace->batCacheid);
-       BBPclear(TRACE_id_inblock->batCacheid);
-       BBPclear(TRACE_id_oublock->batCacheid);
-       BBPclear(TRACE_id_minflt->batCacheid);
-       BBPclear(TRACE_id_majflt->batCacheid);
-       BBPclear(TRACE_id_nvcsw->batCacheid);
-       BBPclear(TRACE_id_stmt->batCacheid);
+       BBPunfix(TRACE_id_event->batCacheid);
+       BBPunfix(TRACE_id_time->batCacheid);
+       BBPunfix(TRACE_id_pc->batCacheid);
+       BBPunfix(TRACE_id_thread->batCacheid);
+       BBPunfix(TRACE_id_ticks->batCacheid);
+       BBPunfix(TRACE_id_rssMB->batCacheid);
+       BBPunfix(TRACE_id_tmpspace->batCacheid);
+       BBPunfix(TRACE_id_inblock->batCacheid);
+       BBPunfix(TRACE_id_oublock->batCacheid);
+       BBPunfix(TRACE_id_minflt->batCacheid);
+       BBPunfix(TRACE_id_majflt->batCacheid);
+       BBPunfix(TRACE_id_nvcsw->batCacheid);
+       BBPunfix(TRACE_id_stmt->batCacheid);
        TRACE_init = 0;
        MT_lock_unset(&mal_contextLock);
        initTrace();
@@ -876,6 +886,10 @@ cachedProfilerEvent(MalBlkPtr mb, MalStk
 
        // keep it a short transaction
        MT_lock_set(&mal_profileLock);
+       if (TRACE_init == 0) {
+               MT_lock_unset(&mal_profileLock);
+               return;
+       }
        errors += BUNappend(TRACE_id_event, &TRACE_event, FALSE) != GDK_SUCCEED;
        errors += BUNappend(TRACE_id_time, ct, FALSE) != GDK_SUCCEED;
        errors += BUNappend(TRACE_id_pc, buf, FALSE) != GDK_SUCCEED;
diff --git a/monetdb5/mal/mal_recycle.c b/monetdb5/mal/mal_recycle.c
--- a/monetdb5/mal/mal_recycle.c
+++ b/monetdb5/mal/mal_recycle.c
@@ -424,6 +424,8 @@ RECYCLEkeep(Client cntxt, MalBlkPtr mb, 
                        c = fndConstant(recycleBlk, &cst, recycleBlk->vtop);
                        if (c<0)
                                c = defConstant(recycleBlk, v->vtype, &cst);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to