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

Reply via email to