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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list