Changeset: 7c0e4baa6fed for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7c0e4baa6fed
Modified Files:
        monetdb5/mal/mal_instruction.c
        monetdb5/optimizer/opt_wrapper.c
        sql/backends/monet5/sql_execute.c
        sql/test/malloc_fail/Tests/All
        sql/test/malloc_fail/Tests/mallocs.SQL.py
Branch: default
Log Message:

more malloc fail checks and re-enabled test case


diffs (110 lines):

diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -263,13 +263,17 @@ copyMalBlk(MalBlkPtr old)
        // copy all variable records
        for (i = 0; i < old->vtop; i++) {
                mb->var[i]=  old->var[i];
-               VALcopy(&(mb->var[i].value), &(old->var[i].value));
+               if (!VALcopy(&(mb->var[i].value), &(old->var[i].value))) {
+                       GDKfree(mb);
+                       GDKerror("copyMalBlk:" MAL_MALLOC_FAIL);
+                       return NULL;
+               }
        }
 
        mb->stmt = (InstrPtr *) GDKzalloc(sizeof(InstrPtr) * old->ssize);
 
        if (mb->stmt == NULL) {
-               GDKfree(mb->var);
+               GDKfree(mb->var); // this leaks strings in var
                GDKfree(mb);
                GDKerror("copyMalBlk:" MAL_MALLOC_FAIL);
                return NULL;
@@ -278,10 +282,20 @@ copyMalBlk(MalBlkPtr old)
        mb->stop = old->stop;
        mb->ssize = old->ssize;
        assert(old->stop < old->ssize);
-       for (i = 0; i < old->stop; i++)
+       for (i = 0; i < old->stop; i++) {
                mb->stmt[i] = copyInstruction(old->stmt[i]);
-
+               if(!mb->stmt[i]) {
+                       GDKfree(mb);
+                       GDKerror("copyMalBlk:" MAL_MALLOC_FAIL);
+                       return NULL;
+               }
+       }
        mb->help = old->help ? GDKstrdup(old->help) : NULL;
+       if (old->help && !mb->help) {
+               GDKfree(mb);
+               GDKerror("copyMalBlk:" MAL_MALLOC_FAIL);
+               return NULL;
+       }
        strncpy(mb->binding,  old->binding, IDLENGTH);
        mb->errors = old->errors;
        mb->tag = old->tag;
diff --git a/monetdb5/optimizer/opt_wrapper.c b/monetdb5/optimizer/opt_wrapper.c
--- a/monetdb5/optimizer/opt_wrapper.c
+++ b/monetdb5/optimizer/opt_wrapper.c
@@ -146,7 +146,7 @@ str OPTwrapper (Client cntxt, MalBlkPtr 
        for (i=0; codes[i].nme; i++)
                if (strcmp(codes[i].nme, optimizer) == 0){
                        actions = (int)(*(codes[i].fcn))(cntxt, mb, stk, 0);
-                       if (actions < 1) {
+                       if (actions < 0) {
                                throw(MAL, optimizer, "Error in optimizer %s", 
optimizer);
                        }
                        break;  
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -271,6 +271,9 @@ SQLrun(Client c, backend *be, mvc *m){
                return createException(PARSE, "SQLparser", "%s", m->errstr);
        // locate and inline the query template instruction
        mb = copyMalBlk(c->curprg->def);
+       if (!mb) {
+               throw(SQL, "sql.prepare", "Out of memory");
+       }
        mb->history = c->curprg->def->history;
        c->curprg->def->history = 0;
 
diff --git a/sql/test/malloc_fail/Tests/All b/sql/test/malloc_fail/Tests/All
--- a/sql/test/malloc_fail/Tests/All
+++ b/sql/test/malloc_fail/Tests/All
@@ -1,1 +1,1 @@
-# mallocs not run for now since it hangs mserver
+# mallocs still hangs
diff --git a/sql/test/malloc_fail/Tests/mallocs.SQL.py 
b/sql/test/malloc_fail/Tests/mallocs.SQL.py
--- a/sql/test/malloc_fail/Tests/mallocs.SQL.py
+++ b/sql/test/malloc_fail/Tests/mallocs.SQL.py
@@ -1,6 +1,10 @@
 import pymonetdb
 import os
 
+import logging
+logging.basicConfig()
+
+
 dbh = pymonetdb.connect(database = os.environ['TSTDB'],
                         port = int(os.environ['MAPIPORT']),
                         hostname = "localhost")
@@ -15,14 +19,15 @@ create procedure setmallocsuccesscount(c
 call setmallocsuccesscount(%d);
 SELECT * FROM tables;
 """
-i = 3300
+i = 3000
+
 while i > 1000:
-    #print(i)
+    print(i)
     i-=1
     try:
         cursor.execute(q % (i))
     except Exception as e:
-        #print(e)
+      # print(e)
         pass
     finally:
         dbh.rollback()
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to