Changeset: 2597830bdf9d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2597830bdf9d
Modified Files:
        gdk/gdk.h
        gdk/gdk_bbp.c
        gdk/gdk_logger.c
        monetdb5/ChangeLog.Jan2022
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_session.c
        sql/storage/bat/bat_utils.h
Branch: Jan2022
Log Message:

Merge with Jul2021 branch.


diffs (87 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1157,7 +1157,7 @@ typedef var_t stridx_t;
 #define BUNtloc(bi,p)  (assert((bi).type != TYPE_msk), ((void *) ((char *) 
(bi).base + ((p) << (bi).shift))))
 #define BUNtpos(bi,p)  Tpos(&(bi),p)
 #define BUNtvar(bi,p)  (assert((bi).type && (bi).b->tvarsized), (void *) 
((bi).vh->base+BUNtvaroff(bi,p)))
-#define BUNtail(bi,p)  
((bi).type?(bi).b->tvarsized?BUNtvar(bi,p):(bi).type==TYPE_msk?BUNtmsk(bi,p):BUNtloc(bi,p):BUNtpos(bi,p))
+#define BUNtail(bi,p)  
((bi).type?(bi).vh?BUNtvar(bi,p):(bi).type==TYPE_msk?BUNtmsk(bi,p):BUNtloc(bi,p):BUNtpos(bi,p))
 
 #define BUNlast(b)     (assert((b)->batCount <= BUN_MAX), (b)->batCount)
 
diff --git a/monetdb5/ChangeLog.Jan2022 b/monetdb5/ChangeLog.Jan2022
--- a/monetdb5/ChangeLog.Jan2022
+++ b/monetdb5/ChangeLog.Jan2022
@@ -1,6 +1,12 @@
 # ChangeLog file for MonetDB5
 # This file is updated with Maddlog
 
+* Mon Apr 24 2023 Sjoerd Mullender <sjo...@acm.org>
+- A bug was fixed where data from a client context was freed after the
+  context was closed.  This meant that the data being freed could belong
+  to the next user of the context (a next client that just connected),
+  leading to chaos (i.e. crashes).
+
 * Fri Mar 24 2023 Sjoerd Mullender <sjo...@acm.org>
 - Client connections are cleaned up better so that we get fewer instances
   of clients that cannot connect.
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
@@ -517,9 +517,11 @@ MCactiveClients(void)
        int active = 0;
        Client cntxt = mal_clients;
 
+       MT_lock_set(&mal_contextLock);
        for(cntxt = mal_clients;  cntxt<mal_clients+MAL_MAXCLIENTS; cntxt++){
                active += (cntxt->idle == 0 && cntxt->mode == RUNCLIENT);
        }
+       MT_lock_unset(&mal_contextLock);
        return active;
 }
 
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -883,9 +883,11 @@ str runMALsequence(Client cntxt, MalBlkP
 
                                                if (garbage[i] >= 0) {
                                                        bid = 
stk->stk[garbage[i]].val.bval;
-                                                       
stk->stk[garbage[i]].val.bval = bat_nil;
-                                                       BBPcold(bid);
-                                                       BBPrelease(bid);
+                                                       if (!is_bat_nil(bid)) {
+                                                               
stk->stk[garbage[i]].val.bval = bat_nil;
+                                                               BBPcold(bid);
+                                                               BBPrelease(bid);
+                                                       }
                                                }
                                        }
                                }
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -567,10 +567,6 @@ MSserveClient(Client c)
        }
        */
 
-       if (c->usermodule /*&& strcmp(c->usermodule->name, "user") == 0*/) {
-               freeModule(c->usermodule);
-               c->usermodule = NULL;
-       }
        MCcloseClient(c);
        return MAL_SUCCEED;
 }
diff --git a/sql/storage/bat/bat_utils.h b/sql/storage/bat/bat_utils.h
--- a/sql/storage/bat/bat_utils.h
+++ b/sql/storage/bat/bat_utils.h
@@ -15,7 +15,7 @@
 /* when returning a log_bid, errors are reported using BID_NIL */
 #define BID_NIL 0
 
-#define bat_set_access(b,access) b->batRestricted = access
+#define bat_set_access(b,access) do { if (b->batRestricted != access) 
b->batRestricted = access; } while (0)
 
 extern BAT *temp_descriptor(log_bid b);
 extern BAT *quick_descriptor(log_bid b);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to