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]