Changeset: 5081473a08de for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5081473a08de
Modified Files:
        sql/storage/bat/bat_storage.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: Jun2023
Log Message:

Fix some data races.


diffs (100 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -2245,7 +2245,8 @@ append_col_execute(sql_trans *tr, sql_de
 {
        int ok = LOG_OK;
 
-       (*delta)->cs.merged = 0; /* TODO needs to move */
+       if ((*delta)->cs.merged)
+               (*delta)->cs.merged = false; /* TODO needs to move */
        if (tt == TYPE_bat) {
                BAT *bat = incoming_data;
 
@@ -3672,7 +3673,7 @@ clear_cs(sql_trans *tr, column_storage *
                temp_destroy(cs->uvbid);
                cs->uvbid = 0;
        }
-       cs->cleared = 1;
+       cs->cleared = true;
        cs->ucnt = 0;
        return sz;
 }
@@ -3960,7 +3961,8 @@ log_table_append(sql_trans *tr, sql_tabl
 static int
 log_storage(sql_trans *tr, sql_table *t, storage *s)
 {
-       int ok = LOG_OK, cleared = s->cs.cleared;
+       int ok = LOG_OK;
+       bool cleared = s->cs.cleared;
        if (ok == LOG_OK && cleared)
                ok =  tr_log_cs(tr, t, &s->cs, s->segs->h, t->base.id);
        if (ok == LOG_OK)
@@ -4007,8 +4009,8 @@ merge_cs( column_storage *cs, const char
                bat_destroy(uv);
                bat_destroy(cur);
        }
-       cs->cleared = 0;
-       cs->merged = 1;
+       cs->cleared = false;
+       cs->merged = true;
        return;
 }
 
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -487,7 +487,7 @@ typedef struct sqlstore {
        ATOMIC_TYPE timestamp;  /* timestamp counter */
        ATOMIC_TYPE transaction;/* transaction id counter */
        ATOMIC_TYPE function_counter;/* function counter used during function 
instantiation */
-       ulng oldest;
+       ATOMIC_TYPE oldest;
        ulng oldest_pending;
        int readonly;                   /* store is readonly */
        int singleuser;                 /* store is for a single user only (==1 
enable, ==2 single user session running) */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -54,14 +54,14 @@ store_transaction_id(sqlstore *store)
 ulng
 store_oldest(sqlstore *store, sql_trans *tr)
 {
-       if (tr && tr->ts == store->oldest) {
+       if (tr && tr->ts == (ulng) ATOMIC_GET(&store->oldest)) {
                sql_session *s = store->active->h->data;
                if (s->tr == tr && store->active->h->next) {
                        s = store->active->h->next->data;
                        return s->tr->ts;
                }
        }
-       return store->oldest;
+       return (ulng) ATOMIC_GET(&store->oldest);
 }
 
 static ulng
@@ -2171,6 +2171,7 @@ store_init(int debug, store_type store_t
                .timestamp = ATOMIC_VAR_INIT(0),
                .lastactive = ATOMIC_VAR_INIT(0),
                .function_counter = ATOMIC_VAR_INIT(0),
+               .oldest = ATOMIC_VAR_INIT(0),
                .sa = pa,
        };
 
@@ -2285,6 +2286,7 @@ store_exit(sqlstore *store)
        ATOMIC_DESTROY(&store->timestamp);
        ATOMIC_DESTROY(&store->transaction);
        ATOMIC_DESTROY(&store->function_counter);
+       ATOMIC_DESTROY(&store->oldest);
        MT_lock_destroy(&store->lock);
        MT_lock_destroy(&store->commit);
        MT_lock_destroy(&store->flush);
@@ -7224,7 +7226,7 @@ sql_trans_end(sql_session *s, int ok)
                                oldest = tr->ts;
                }
        }
-       store->oldest = oldest;
+       ATOMIC_SET(&store->oldest, oldest);
        assert(list_length(store->active) == (int) 
ATOMIC_GET(&store->nr_active));
        store_unlock(store);
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to