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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list