Changeset: c3fce99529f1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c3fce99529f1
Modified Files:
        sql/storage/bat/bat_storage.c
Branch: Aug2024
Log Message:

Avoid a data race.


diffs (35 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
@@ -4618,7 +4618,6 @@ add_offsets(BUN slot, size_t nr, size_t 
 static int
 claim_segmentsV2(sql_trans *tr, sql_table *t, storage *s, size_t cnt, BUN 
*offset, BAT **offsets, bool locked)
 {
-       int in_transaction = segments_in_transaction(tr, t), ok = LOG_OK;
        assert(s->segs);
        ulng oldest = store_oldest(tr->store, NULL);
        BUN slot = 0;
@@ -4626,6 +4625,7 @@ claim_segmentsV2(sql_trans *tr, sql_tabl
 
        if (!locked)
                lock_table(tr->store, t->base.id);
+       int in_transaction = segments_in_transaction(tr, t), ok = LOG_OK;
        /* naive vacuum approach, iterator through segments, use deleted 
segments or create new segment at the end */
        for (segment *seg = s->segs->h, *p = NULL; seg && cnt && ok == LOG_OK; 
p = seg, seg = ATOMIC_PTR_GET(&seg->next)) {
                if (seg->deleted && seg->ts < oldest && seg->end > seg->start) 
{ /* reuse old deleted or rolled back append */
@@ -4707,7 +4707,6 @@ claim_segments(sql_trans *tr, sql_table 
 {
        if (cnt > 1 && offsets)
                return claim_segmentsV2(tr, t, s, cnt, offset, offsets, locked);
-       int in_transaction = segments_in_transaction(tr, t), ok = LOG_OK;
        assert(s->segs);
        ulng oldest = store_oldest(tr->store, NULL);
        BUN slot = 0;
@@ -4715,6 +4714,7 @@ claim_segments(sql_trans *tr, sql_table 
 
        if (!locked)
                lock_table(tr->store, t->base.id);
+       int in_transaction = segments_in_transaction(tr, t), ok = LOG_OK;
        /* naive vacuum approach, iterator through segments, check for large 
enough deleted segments
         * or create new segment at the end */
        for (segment *seg = s->segs->h, *p = NULL; seg && ok == LOG_OK; p = 
seg, seg = ATOMIC_PTR_GET(&seg->next)) {
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to