Changeset: d58a22099c36 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d58a22099c36
Modified Files:
monetdb5/mal/mal_instruction.mx
monetdb5/mal/mal_interpreter.mx
sql/backends/monet5/sql_scenario.c
Branch: default
Log Message:
Merge with Dec2011 branch, adapting to atomDestroy field in BATatoms.
diffs (truncated from 475 to 300 lines):
diff --git a/java/version.sh b/java/version.sh
--- a/java/version.sh
+++ b/java/version.sh
@@ -130,3 +130,8 @@ sed \
-e "s|${TYPE}_MINOR=${ESC_MINOR}|${TYPE}_MINOR=${NEW_MINOR}|g" \
-e
"s|${TYPE}_VER_SUFFIX=${ESC_SUFFIX}|${TYPE}_VER_SUFFIX=${NEW_SUFFIX}|g" \
${file} | ${diff} ${file} - | ${patch}
+
+file="pom.xml"
+sed \
+ -e
"s|<version>${ESC_MAJOR}\.${ESC_MINOR}</version>|<version>${NEW_MAJOR}.${NEW_MINOR}</version>|g"
\
+ ${file} | ${diff} ${file} - | ${patch}
diff --git a/monetdb5/ChangeLog.Dec2011 b/monetdb5/ChangeLog.Dec2011
--- a/monetdb5/ChangeLog.Dec2011
+++ b/monetdb5/ChangeLog.Dec2011
@@ -1,3 +1,6 @@
# ChangeLog file for MonetDB5
# This file is updated with Maddlog
+* Mon Jan 16 2012 Sjoerd Mullender <[email protected]>
+- A couple of memory leaks have been plugged.
+
diff --git a/monetdb5/mal/Tests/run b/monetdb5/mal/Tests/run
--- a/monetdb5/mal/Tests/run
+++ b/monetdb5/mal/Tests/run
@@ -19,7 +19,7 @@ do
echo "----" $f $b $s $t
echo "stdout of test '$b\` in directory 'src/mal\` itself:" > $t.out
echo "stderr of test '$b\` in directory 'src/mal\` itself:" > $t.err
- echo $MSERVER $f
+ echo `date` $MSERVER $f
$MSERVER $f </dev/null >> $t.valgrind.out 2>> $t.valgrind.err |tee
$t.valgrind.out
#diff -I'^# [Cc]ompiled for ' -I'^# config:' -I'^# dbfarm:' -I'^#
dbname:' $t.out $s.out
#diff -I'^# [Cc]ompiled for ' -I'^# config:' -I'^# dbfarm:' -I'^#
dbname:' $t.err $s.err
diff --git a/monetdb5/mal/mal_instruction.mx b/monetdb5/mal/mal_instruction.mx
--- a/monetdb5/mal/mal_instruction.mx
+++ b/monetdb5/mal/mal_instruction.mx
@@ -1760,7 +1760,8 @@ defConstant(MalBlkPtr mb, int type, ValP
k = newTmpVariable(mb, type);
setVarConstant(mb, k);
setVarFixed(mb, k);
- if ( type == TYPE_str)
+ if (type == TYPE_str ||
+ (type >= 0 && type < TYPE_any && BATatoms[type].atomDestroy))
setVarCleanup(mb, k);
else clrVarCleanup(mb, k);
vr = &getVarConstant(mb, k);
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
@@ -448,8 +448,7 @@ str runMALsequence(Client cntxt, MalBlkP
int exceptionVar, prevpc = 0;
str ret = 0;
int stamp = -1;
- bat *backup = (bat*)GDKzalloc(mb->maxarg * sizeof(bat));
- str *sbackup = (str*)GDKzalloc(mb->maxarg * sizeof(str));
+ ValPtr backup = GDKzalloc(mb->maxarg * sizeof(ValRecord));
int *garbage = (int*)GDKzalloc(mb->maxarg * sizeof(int));
lng oldtimer = 0;
struct Mallinfo oldMemory;
@@ -567,7 +566,6 @@ workslow:
}
}
GDKfree(backup);
- GDKfree(sbackup);
GDKfree(garbage);
return ret;
}
@@ -943,8 +941,7 @@ DFLOWstep(FlowTask *t, FlowStatus fs)
int i, k;
int exceptionVar = -1;
str ret = MAL_SUCCEED;
- bat *backup = (bat*)GDKzalloc(fs->mb->maxarg * sizeof(bat));
- str *sbackup = (str*)GDKzalloc(fs->mb->maxarg * sizeof(str));
+ ValPtr backup = GDKzalloc(fs->mb->maxarg * sizeof(ValRecord));
int *garbage = (int*)GDKzalloc(fs->mb->maxarg * sizeof(int));
Client cntxt = fs->cntxt;
MalBlkPtr mb = fs->mb;
@@ -989,7 +986,6 @@ DFLOWstep(FlowTask *t, FlowStatus fs)
stkpc = mb->stop;
fs->state = -1;
GDKfree(backup);
- GDKfree(sbackup);
GDKfree(garbage);
return ret;
}
@@ -1016,19 +1012,19 @@ DFLOWstep(FlowTask *t, FlowStatus fs)
*/
switch (pci->token) {
case ASSIGNsymbol:
- @:assignStmt(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(sbackup);GDKfree(garbage); return ret,t)@
+ @:assignStmt(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(garbage); return ret,t)@
break;
case PATcall:
- @:patterncall(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(sbackup);GDKfree(garbage); return ret,t)@
+ @:patterncall(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(garbage); return ret,t)@
break;
case CMDcall:
- @:commandcall(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(sbackup);GDKfree(garbage); return ret,t)@
+ @:commandcall(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(garbage); return ret,t)@
break;
case FACcall:
- @:factorycall(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(sbackup);GDKfree(garbage); return ret,t)@
+ @:factorycall(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(garbage); return ret,t)@
break;
case FCNcall:
- @:functioncall(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(sbackup);GDKfree(garbage); return ret,t)@
+ @:functioncall(FAST,fs->pc = -fs->pc; GDKfree(backup);
GDKfree(garbage); return ret,t)@
break;
case NOOPsymbol:
case REMsymbol:
@@ -1046,7 +1042,6 @@ DFLOWstep(FlowTask *t, FlowStatus fs)
if (ret)
fs->pc = -fs->pc;
GDKfree(backup);
- GDKfree(sbackup);
GDKfree(garbage);
return ret;
}
@@ -1728,7 +1723,6 @@ safeguardStack(Client cntxt, MalBlkPtr m
if (oldtimer)
cntxt->timer = oldtimer;
GDKfree(backup);
- GDKfree(sbackup);
GDKfree(garbage);
return yieldFactory(mb, pci, stkpc);
case RETURNsymbol:
@@ -1839,25 +1833,30 @@ safeguardStack(Client cntxt, MalBlkPtr m
#endif
if (garbageControl(pci)) {
for (i = 0; i < pci->argc; i++) {
- sbackup[i] = 0;
- backup[i] = 0;
+ int a = getArg(pci, i);
+
+ backup[i].vtype = 0;
+ backup[i].len = 0;
+ backup[i].val.pval = 0;
garbage[i] = -1;
- if (stk->stk[getArg(pci, i)].vtype == TYPE_bat &&
getEndOfLife(mb, getArg(pci, i)) == stkpc && isNotUsedIn(pci, i + 1,
getArg(pci, i))) {
- garbage[i] = getArg(pci, i);
+ if (stk->stk[a].vtype == TYPE_bat && getEndOfLife(mb,
a) == stkpc && isNotUsedIn(pci, i + 1, a)) {
+ garbage[i] = a;
#ifdef DEBUG_GC
- mnstr_printf(GDKstdout, "GC %d %s prep\n",
getArg(pci, i), getArgName(mb, pci, i));
+ mnstr_printf(GDKstdout, "GC %d %s prep\n", a,
getArgName(mb, pci, i));
#endif
}
- if (i < pci->retc && stk->stk[getArg(pci, i)].vtype ==
TYPE_bat) {
- backup[i] = stk->stk[getArg(pci, i)].val.bval;
+ if (i < pci->retc && stk->stk[a].vtype == TYPE_bat) {
+ backup[i] = stk->stk[a];
#if @1
stamp = BBPcurstamp();
#endif
- } else if (i < pci->retc && stk->stk[getArg(pci,
i)].vtype == TYPE_str) {
- backup[i] = stk->stk[getArg(pci, i)].len;
- sbackup[i] = stk->stk[getArg(pci, i)].val.sval;
- backup[i] += (sbackup[i] != NULL);
+ } else if (i < pci->retc &&
+ (stk->stk[a].vtype == TYPE_str ||
+ (0 < stk->stk[a].vtype &&
+ stk->stk[a].vtype < TYPE_any &&
+
BATatoms[stk->stk[a].vtype].atomDestroy))) {
+ backup[i] = stk->stk[a];
}
}
}
@@ -1899,20 +1898,22 @@ safeguardStack(Client cntxt, MalBlkPtr m
@:MALrecycleExit(@2)@
if (ret == MAL_SUCCEED && garbageControl(pci)) {
for (i = 0; i < pci->argc; i++) {
+ int a = getArg(pci, i);
+
if (isaBatType(getArgType(mb, pci, i))) {
- bat bid = stk->stk[getArg(pci, i)].val.bval;
+ bat bid = stk->stk[a].val.bval;
/* update the bigfoot information only if we
need to gc */
if (cntxt->flags & bigfootFlag)
updateBigFoot(cntxt, bid, TRUE);
- if (i < pci->retc && backup[i]) {
- if (backup[i] != bid && i < pci->retc) {
+ if (i < pci->retc && backup[i].val.bval) {
+ if (backup[i].val.bval != bid && i <
pci->retc) {
/* possible garbage collect the
variable */
if (cntxt->flags & bigfootFlag)
- updateBigFoot(cntxt,
backup[i], FALSE);
+ updateBigFoot(cntxt,
backup[i].val.bval, FALSE);
}
- BBPdecref(backup[i], TRUE);
- backup[i] = 0;
+ BBPdecref(backup[i].val.bval, TRUE);
+ backup[i].val.bval = 0;
}
if (garbage[i] >= 0) {
bid =
ABS(stk->stk[garbage[i]].val.bval);
@@ -1920,17 +1921,20 @@ safeguardStack(Client cntxt, MalBlkPtr m
PARDEBUG mnstr_printf(GDKstdout, "#GC
pc=%d bid=%d %s done\n", stkpc, bid, getVarName(mb, garbage[i]));
stk->stk[garbage[i]].val.bval = 0;
}
- } else if (i < pci->retc && stk->stk[getArg(pci,
i)].vtype == TYPE_str) {
- int a = getArg(pci, i);
- if (sbackup[i] && sbackup[i] !=
stk->stk[a].val.sval) {
- if (backup[i] > 0)
- GDKfree(sbackup[i]);
+ } else if (i < pci->retc &&
+ 0 < stk->stk[a].vtype &&
+ stk->stk[a].vtype < TYPE_any &&
+
BATatoms[stk->stk[a].vtype].atomDestroy) {
+ if (backup[i].val.pval &&
+ backup[i].val.pval !=
stk->stk[a].val.pval) {
+ if (backup[i].val.pval)
+
(*BATatoms[stk->stk[a].vtype].atomDestroy)(backup[i].val.pval);
if (i >= pci->retc) {
- stk->stk[getArg(pci,
i)].val.sval = 0;
- stk->stk[getArg(pci, i)].len =
0;
+ stk->stk[a].val.sval = 0;
+ stk->stk[a].len = 0;
}
- backup[i] = 0;
- sbackup[i] = 0;
+ backup[i].len = 0;
+ backup[i].val.pval = 0;
}
}
}
@@ -2464,6 +2468,7 @@ void garbageElement(Client cntxt, ValPtr
BBPdecref(bid, TRUE);
} else if (BATatoms[v->vtype].atomDestroy) {
(*BATatoms[v->vtype].atomDestroy)(v->val.pval);
+ v->val.pval = 0;
}
}
/*
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -401,10 +401,11 @@ sql_update_dec2011( Client c, mvc *m )
}
}
}
- if (bufsize < pos + 256)
+ if (bufsize < pos + 400)
buf = GDKrealloc(buf, bufsize += 1024);
pos += snprintf(buf+pos, bufsize-pos, "create filter function
sys.\"like\"(val string, pat string, esc string) external name
pcre.like_filter;\n");
pos += snprintf(buf+pos, bufsize-pos, "create filter function
sys.\"ilike\"(val string, pat string, esc string) external name
pcre.ilike_filter;\n");
+ pos += snprintf(buf + pos, bufsize-pos, "insert into
sys.systemfunctions (select f.id from sys.functions f, sys.schemas s where
f.name in ('ilike', 'like') and f.type = %d and f.schema_id = s.id and s.name =
'sys');\n", F_FILT);
printf("Running database upgrade commands:\n%s\n", buf);
err = SQLstatementIntern(c, &buf, "update", 1, 0);
GDKfree(buf);
diff --git a/sql/test/BugTracker-2012/Tests/All
b/sql/test/BugTracker-2012/Tests/All
--- a/sql/test/BugTracker-2012/Tests/All
+++ b/sql/test/BugTracker-2012/Tests/All
@@ -1,2 +1,7 @@
+# tests related to bug reports:
+# <descriptive-name>.Bug-<bug-report-id>
+#
time-export-bug.Bug-2963
sticky-precision.Bug-2969
+url_script_test.Bug-2972
+date_script_test.Bug-2973
diff --git a/sql/test/BugTracker-2012/Tests/date_script_test.Bug-2973.sql
b/sql/test/BugTracker-2012/Tests/date_script_test.Bug-2973.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2012/Tests/date_script_test.Bug-2973.sql
@@ -0,0 +1,6 @@
+-- We need a proof that these coercions indeed work on all platforms
+
+select str_to_date('2012','%y');
+
+select date_to_str(now(),'%y%m');
+-- and a few more
diff --git
a/sql/test/BugTracker-2012/Tests/date_script_test.Bug-2973.stable.err
b/sql/test/BugTracker-2012/Tests/date_script_test.Bug-2973.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2012/Tests/date_script_test.Bug-2973.stable.err
@@ -0,0 +1,37 @@
+stderr of test 'date_script_test.Bug-2973` in directory 'test/BugTracker-2012`
itself:
+
+
+# 14:12:34 >
+# 14:12:34 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"gdk_dbfarm=/ufs/manegold/_/Monet/HG/Dec2011/prefix/--disable-debug_--enable-optimize_--disable-assert/var/MonetDB"
"--set" "mapi_open=true" "--set" "mapi_port=36122" "--set" "monet_prompt="
"--trace" "--forcemito" "--set" "mal_listing=2"
"--dbname=mTests_test_BugTracker-2012" "--set" "mal_listing=0"
+# 14:12:34 >
+
+# builtin opt gdk_dbname = demo
+# builtin opt gdk_dbfarm =
/ufs/manegold/_/Monet/HG/Dec2011/prefix/--disable-debug_--enable-optimize_--disable-assert/var/monetdb5/dbfarm
+# builtin opt gdk_debug = 0
+# builtin opt gdk_alloc_map = no
+# builtin opt gdk_vmtrim = yes
+# builtin opt monet_prompt = >
+# builtin opt monet_daemon = no
+# builtin opt mapi_port = 50000
+# builtin opt mapi_open = false
+# builtin opt mapi_autosense = false
+# builtin opt sql_optimizer = default_pipe
+# builtin opt sql_debug = 0
+# cmdline opt gdk_nr_threads = 0
+# cmdline opt gdk_dbfarm =
/ufs/manegold/_/Monet/HG/Dec2011/prefix/--disable-debug_--enable-optimize_--disable-assert/var/MonetDB
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list