Changeset: e7ebd125b103 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e7ebd125b103
Modified Files:
clients/mapiclient/mclient.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_semantic.c
sql/storage/bat/bat_storage.c
Branch: default
Log Message:
Merge with Jun2016 branch.
diffs (truncated from 623 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/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);
+ else
+ VALclear(&cst);
} else {
c = newTmpVariable(recycleBlk, v->vtype);
setVarConstant(recycleBlk, c);
@@ -434,6 +436,7 @@ RECYCLEkeep(Client cntxt, MalBlkPtr mb,
clrVarCleanup(recycleBlk, c);
v = &getVarConstant(recycleBlk, c);
VALcopy(v,&cst);
+ VALclear(&cst);
}
if (v->vtype == TYPE_bat)
BBPincref( *(const int*)VALptr(v), TRUE);
@@ -864,7 +867,7 @@ RECYCLEexit(Client cntxt, MalBlkPtr mb,
/* infinite case, admit all new instructions */
if (RECYCLEfind(cntxt,mb,stk,p)<0 )
- (void) RECYCLEkeep(cntxt,mb, stk, p, prof);
+ RECYCLEkeep(cntxt,mb, stk, p, prof);
recycleSearchTime += GDKusec()-clk;
recycleSearchCalls++;
MT_lock_unset(&recycleLock);
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -318,14 +318,14 @@ pcre_likesubselect(BAT **bnp, BAT *b, BA
pe = pcre_study(re, 0, &error);
if (error != NULL) {
my_pcre_free(re);
- my_pcre_free(pe);
+ pcre_free_study(pe);
throw(MAL, "pcre.likesubselect",
OPERATION_FAILED ": studying pattern \"%s\"
failed\n", pat);
}
bn = BATnew(TYPE_void, TYPE_oid, s ? BATcount(s) : BATcount(b),
TRANSIENT);
if (bn == NULL) {
my_pcre_free(re);
- my_pcre_free(pe);
+ pcre_free_study(pe);
throw(MAL, "pcre.likesubselect", MAL_MALLOC_FAIL);
}
off = b->hseqbase - BUNfirst(b);
@@ -373,7 +373,7 @@ pcre_likesubselect(BAT **bnp, BAT *b, BA
pcre_exec(re, pe, v, (int) strlen(v), 0, 0,
ovector, 10) >= 0);
}
my_pcre_free(re);
- my_pcre_free(pe);
+ pcre_free_study(pe);
bn->tsorted = 1;
bn->trevsorted = bn->batCount <= 1;
bn->tkey = 1;
@@ -391,7 +391,7 @@ pcre_likesubselect(BAT **bnp, BAT *b, BA
bunins_failed:
BBPreclaim(bn);
my_pcre_free(re);
- my_pcre_free(pe);
+ pcre_free_study(pe);
*bnp = NULL;
throw(MAL, "pcre.likesubselect", OPERATION_FAILED);
}
@@ -567,6 +567,7 @@ pcre_replace(str *res, const char *origi
offset = ovector[1];
}
} while((j > 0) && (offset < len_origin_str) && (ncaptures <
MAX_NR_CAPTURES));
+ pcre_free_study(extra);
if (ncaptures > 0){
tmpres = GDKmalloc(len_origin_str - len_del + (len_replacement
* ncaptures) + 1);
@@ -688,6 +689,7 @@ pcre_replace_bat(BAT **res, BAT *origin_
replaced_str = GDKmalloc(len_origin_str - len_del +
(len_replacement * ncaptures) + 1);
if (!replaced_str) {
my_pcre_free(pcre_code);
+ pcre_free_study(extra);
GDKfree(ovector);
throw(MAL, "pcre_replace_bat", MAL_MALLOC_FAIL);
}
@@ -725,6 +727,7 @@ pcre_replace_bat(BAT **res, BAT *origin_
}
}
+ pcre_free_study(extra);
my_pcre_free(pcre_code);
GDKfree(ovector);
BATseqbase(tmpbat, origin_strs->hseqbase);
@@ -1576,7 +1579,7 @@ pcresubjoin(BAT *r1, BAT *r2, BAT *l, BA
}
if (pcrere) {
my_pcre_free(pcrere);
- my_pcre_free(pcreex);
+ pcre_free_study(pcreex);
pcrere = NULL;
pcreex = NULL;
}
@@ -1618,7 +1621,7 @@ pcresubjoin(BAT *r1, BAT *r2, BAT *l, BA
if (pcrere)
my_pcre_free(pcrere);
if (pcreex)
- my_pcre_free(pcreex);
+ pcre_free_study(pcreex);
assert(msg != MAL_SUCCEED);
return msg;
}
diff --git a/monetdb5/optimizer/opt_mergetable.c
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -27,7 +27,7 @@ typedef struct mat {
int pm; /* parent mat, for sub relations */
mat_type_t type; /* type of operation */
int packed;
- int pushed;
+ int pushed; /* set if instruction pushed and shouldn't be
freed */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list