Changeset: 3543efca8705 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3543efca8705
Modified Files:
        sql/server/sql_mvc.c
Branch: Nov2019
Log Message:

Hold store_lock longer for integrity of the session


diffs (48 lines):

diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -803,20 +803,21 @@ mvc_create(int clientid, backend_stack s
 int
 mvc_reset(mvc *m, bstream *rs, stream *ws, int debug)
 {
-       int i, res = 1;
+       int i, res = 1, reset;
        sql_trans *tr;
 
        if (mvc_debug)
                fprintf(stderr, "#mvc_reset\n");
        tr = m->session->tr;
+       store_lock();
        if (tr && tr->parent) {
                assert(m->session->tr->active == 0);
-               store_lock();
                while (tr->parent->parent != NULL) 
                        tr = sql_trans_destroy(tr, true);
-               store_unlock();
        }
-       if (tr && !sql_session_reset(m->session, 1 /*autocommit on*/))
+       reset = sql_session_reset(m->session, 1 /*autocommit on*/);
+       store_unlock();
+       if (tr && !reset)
                res = 0;
 
        if (m->sa)
@@ -877,16 +878,16 @@ mvc_destroy(mvc *m)
        if (mvc_debug)
                fprintf(stderr, "#mvc_destroy\n");
        tr = m->session->tr;
+       store_lock();
        if (tr) {
-               store_lock();
                if (m->session->tr->active)
                        sql_trans_end(m->session);
                while (tr->parent)
                        tr = sql_trans_destroy(tr, true);
                m->session->tr = NULL;
-               store_unlock();
        }
        sql_session_destroy(m->session);
+       store_unlock();
 
        stack_pop_until(m, 0);
        _DELETE(m->vars);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to