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

Safer way of replacing pointer.


diffs (33 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
@@ -4001,11 +4001,13 @@ temp_del_tab(sql_trans *tr, sql_table *t
 {
        ulng tid = tr->tid;
        lock_table(tr->store, t->base.id);
+  table_retry:
        for (storage *d = ATOMIC_PTR_GET(&t->data), *p = NULL, *n = NULL; d; d 
= n) {
                n = d->next;
                if (d->cs.ts == tid) {
                        if (p == NULL) {
-                               ATOMIC_PTR_SET(&t->data, n);
+                               if (!ATOMIC_PTR_CAS(&t->data, (void **) &d, n))
+                                       goto table_retry;
                        } else {
                                p->next = n;
                        }
@@ -4019,11 +4021,13 @@ temp_del_tab(sql_trans *tr, sql_table *t
        for (node *nd = t->columns->l->h; nd; nd = nd->next) {
                sql_column *c = nd->data;
                lock_column(tr->store, c->base.id);
+         column_retry:
                for (sql_delta *d = ATOMIC_PTR_GET(&c->data), *p = NULL, *n = 
NULL; d; d = n) {
                        n = d->next;
                        if (d->cs.ts == tid) {
                                if (p == NULL) {
-                                       ATOMIC_PTR_SET(&c->data, n);
+                                       if (!ATOMIC_PTR_CAS(&c->data, (void **) 
&d, n))
+                                               goto column_retry;
                                } else {
                                        p->next = n;
                                }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to