Changeset: acc761ea1425 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=acc761ea1425
Modified Files:
        ctest/tools/monetdbe/example_append.c
        tools/monetdbe/monetdbe.c
Branch: append-optimization
Log Message:

fixed double free


diffs (69 lines):

diff --git a/ctest/tools/monetdbe/example_append.c 
b/ctest/tools/monetdbe/example_append.c
--- a/ctest/tools/monetdbe/example_append.c
+++ b/ctest/tools/monetdbe/example_append.c
@@ -201,8 +201,6 @@ main(void)
                }
                printf("\n");
        }
-
-       printf("Starting cleanup\n");
        
        if ((err = monetdbe_cleanup_result(mdbe, result)) != NULL)
                error(err)
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -1131,12 +1131,12 @@ monetdbe_append(monetdbe_database dbhdl,
                goto cleanup;
        }
 
-       if (schema) { // i think this is always gonna be non null cause the 
check is before
+       if (schema) { 
                if (!(s = mvc_bind_schema(m, schema))) {
                        mdbe->msg = createException(MAL, 
"monetdbe.monetdbe_append", "Schema missing %s", schema);
                        goto cleanup;
                }
-       } else {//when are we gonna be here
+       } else {
                s = cur_schema(m);
        }
 
@@ -1152,7 +1152,7 @@ monetdbe_append(monetdbe_database dbhdl,
                goto cleanup;
        }
 
-       cnt = input[0]->count; // where is it used
+       cnt = input[0]->count;
 
        for (i = 0, n = t->columns.set->h; i < column_count && n; i++, n = 
n->next) {
                sql_column *c = n->data;
@@ -1175,11 +1175,17 @@ monetdbe_append(monetdbe_database dbhdl,
                        //-------------------------------------
                        BAT *bn = NULL;
                        if ((bn = COLnew(0, TYPE_int, 0, TRANSIENT)) == NULL) {
-                               //BBPreclaim(bn);
+                               BBPreclaim(bn);
                                mdbe->msg = createException(SQL, 
"monetdbe.monetdbe_append", "Cannot create append column");
                                goto cleanup;
                        }
 ;
+                       //save prev heap pointer                        
+                       char *prev_base;
+                       size_t prev_size;
+                       prev_base = bn->theap.base;
+                       prev_size = bn->theap.size;
+
                        //BAT heap base to input[i]->data
                        bn->theap.base = input[i]->data;
                        bn->theap.size = tailsize(bn, cnt);
@@ -1197,7 +1203,9 @@ monetdbe_append(monetdbe_database dbhdl,
 
                        }
 
-                       //BBPreclaim(bn);
+                       bn->theap.base = prev_base;
+                       bn->theap.size = prev_size;
+                       BBPreclaim(bn);
                        
                        //-------------------------------------
                        /*
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to