Changeset: d868c719debb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d868c719debb
Modified Files:
        embedded/monetdb_embedded.c
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_embedded.c
Branch: cmake-monetdblite
Log Message:

Fixed memory leaks.


diffs (69 lines):

diff --git a/embedded/monetdb_embedded.c b/embedded/monetdb_embedded.c
--- a/embedded/monetdb_embedded.c
+++ b/embedded/monetdb_embedded.c
@@ -221,10 +221,12 @@ monetdb_query_internal(monetdb_connectio
        buffer query_buf;
        stream *query_stream;
        monetdb_result_internal *res_internal = NULL;
+       bstream *old_bstream;
 
        if ((msg = validate_connection(conn, 
"embedded.monetdb_query_internal")) != MAL_SUCCEED)
                return msg;
 
+       old_bstream = c->fdin;
        b = (backend *) c->sqlcontext;
        m = b->mvc;
 
@@ -243,12 +245,12 @@ monetdb_query_internal(monetdb_connectio
        query_buf.buf = nq;
 
        if (!(c->fdin = bstream_create(query_stream, query_len))) {
-               close_stream(query_stream);
-               return createException(MAL, "embedded.monetdb_query_internal", 
SQLSTATE(HY001) "WARNING: could not setup query stream.");
+               msg = createException(MAL, "embedded.monetdb_query_internal", 
SQLSTATE(HY001) "WARNING: could not setup query stream.");
+               goto cleanup;
        }
        if (bstream_next(c->fdin) < 0) {
-               close_stream(query_stream);
-               throw(MAL, "embedded.monetdb_query_internal", SQLSTATE(HY001) 
"Internal error while starting the query");
+               msg = createException(MAL, "embedded.monetdb_query_internal", 
SQLSTATE(HY001) "Internal error while starting the query");
+               goto cleanup;
        }
 
        b->language = language;
@@ -310,7 +312,7 @@ cleanup:
        GDKfree(nq);
        MSresetInstructions(c->curprg->def, 1);
        bstream_destroy(c->fdin);
-       c->fdin = NULL;
+       c->fdin = old_bstream;
 
        commit_msg = SQLautocommit(m); //need always to commit even if msg is 
set
        if ((msg != MAL_SUCCEED || commit_msg != MAL_SUCCEED)) {
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -193,8 +193,8 @@ MCexitClient(Client c)
                assert(c->bak == NULL);
                if (c->fdin) {
                        /* protection against closing stdin stream */
-                        if (c->fdin->s == GDKstdin)
-                                c->fdin->s = NULL;
+                       if (c->fdin->s == GDKstdin)
+                               c->fdin->s = NULL;
                        bstream_destroy(c->fdin);
                }
                c->fdout = NULL;
diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c
--- a/monetdb5/mal/mal_embedded.c
+++ b/monetdb5/mal/mal_embedded.c
@@ -188,9 +188,7 @@ malEmbeddedReset(void) //remove extra mo
        mal_namespace_reset();
        /* No need to clean up the namespace, it will simply be extended
         * upon restart mal_namespace_reset(); */
-#ifndef HAVE_EMBEDDED
        GDKreset(0);    // terminate all other threads
-#endif
        embeddedinitialized = false;
 }
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to