Changeset: 1039153ec2be for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1039153ec2be
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_statement.c
        sql/include/sql_catalog.h
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_table.c
        sql/storage/store.c
Branch: default
Log Message:

use ATOMIC_PTR_TYPE to make it compile with sanitizer (or optimization I guess)


diffs (truncated from 969 to 300 lines):

diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1359,7 +1359,7 @@ mvc_insert_delta_values(mvc *m, BAT *col
        }
        /* compute level using global transaction */
        if (c) {
-                       for(sql_delta *d = c->data; d; d = d->next)
+                       for(sql_delta *d = ATOMIC_PTR_GET(&c->data); d; d = 
d->next)
                                level++;
        }
        if (BUNappend(col7, &level, false) != GDK_SUCCEED) {
@@ -3823,7 +3823,7 @@ sql_rowid(Client cntxt, MalBlkPtr mb, Ma
        if( b == NULL)
                throw(SQL,"sql.rowid", SQLSTATE(HY005) "Cannot access column 
descriptor");
        /* UGH (move into storage backends!!) */
-       d = c->data;
+       d = ATOMIC_PTR_GET(&c->data);
        *rid = d->ibase + BATcount(b);
        BBPunfix(b->batCacheid);
        return MAL_SUCCEED;
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -843,7 +843,7 @@ mvc_import_table(Client cntxt, BAT ***ba
                        for (n = t->columns.set->h, i = 0; n; n = n->next, i++) 
{
                                sql_column *c = n->data;
                                BAT *b = 
store->storage_api.bind_col(m->session->tr, c, RDONLY);
-                               sql_delta *d = c->data;
+                               sql_delta *d = ATOMIC_PTR_GET(&c->data);
 
                                if ( b == NULL)
                                        sql_error(m, 500, "failed to bind to 
delta column");
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -429,7 +429,7 @@ stmt_vars(backend *be, const char *varna
                        return NULL;
                }
 
-               t->data = l;
+               ATOMIC_PTR_SET(&t->data, l);
                /*
                s->op2 = (stmt*)l;
                s->op3 = (stmt*)t;
@@ -532,9 +532,9 @@ stmt_tid(backend *be, sql_table *t, int 
        MalBlkPtr mb = be->mb;
        InstrPtr q;
 
-       if (!t->s && t->data) { /* declared table */
+       if (!t->s && ATOMIC_PTR_GET(&t->data)) { /* declared table */
                stmt *s = stmt_create(be->mvc->sa, st_tid);
-               int *l = t->data;
+               int *l = ATOMIC_PTR_GET(&t->data);
 
                if (s == NULL) {
                        return NULL;
@@ -584,9 +584,9 @@ stmt_bat(backend *be, sql_column *c, int
        InstrPtr q;
 
        /* for read access tid.project(col) */
-       if (!c->t->s && c->t->data) { /* declared table */
+       if (!c->t->s && ATOMIC_PTR_GET(&c->t->data)) { /* declared table */
                stmt *s = stmt_create(be->mvc->sa, st_bat);
-               int *l = c->t->data;
+               int *l = ATOMIC_PTR_GET(&c->t->data);
 
                if (s == NULL) {
                        return NULL;
@@ -708,8 +708,8 @@ stmt_append_col(backend *be, sql_column 
        if (b->nr < 0)
                return NULL;
 
-       if (!c->t->s && c->t->data) { /* declared table */
-               int *l = c->t->data;
+       if (!c->t->s && ATOMIC_PTR_GET(&c->t->data)) { /* declared table */
+               int *l = ATOMIC_PTR_GET(&c->t->data);
 
                if (c->colnr == 0) { /* append to tid column */
                        q = newStmt(mb, sqlRef, growRef);
@@ -798,8 +798,8 @@ stmt_update_col(backend *be, sql_column 
        if (tids->nr < 0 || upd->nr < 0)
                return NULL;
 
-       if (!c->t->s && c->t->data) { /* declared table */
-               int *l = c->t->data;
+       if (!c->t->s && ATOMIC_PTR_GET(&c->t->data)) { /* declared table */
+               int *l = ATOMIC_PTR_GET(&c->t->data);
 
                q = newStmt(mb, batRef, replaceRef);
                q = pushArgument(mb, q, l[c->colnr+1]);
@@ -883,8 +883,8 @@ stmt_delete(backend *be, sql_table *t, s
        if (tids->nr < 0)
                return NULL;
 
-       if (!t->s && t->data) { /* declared table */
-               int *l = t->data;
+       if (!t->s && ATOMIC_PTR_GET(&t->data)) { /* declared table */
+               int *l = ATOMIC_PTR_GET(&t->data);
 
                q = newStmt(mb, batRef, deleteRef);
                q = pushArgument(mb, q, l[0]);
@@ -2968,8 +2968,8 @@ stmt_table_clear(backend *be, sql_table 
        MalBlkPtr mb = be->mb;
        InstrPtr q = NULL;
 
-       if (!t->s && t->data) { /* declared table */
-               int *l = t->data, cnt = list_length(t->columns.set)+1;
+       if (!t->s && ATOMIC_PTR_GET(&t->data)) { /* declared table */
+               int *l = ATOMIC_PTR_GET(&t->data), cnt = 
list_length(t->columns.set)+1;
 
                for (int i = 0; i < cnt; i++) {
                        q = newStmt(mb, batRef, deleteRef);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -14,6 +14,7 @@
 #include "sql_hash.h"
 #include "mapi_querytype.h"
 #include "stream.h"
+#include "matomic.h"
 
 #define tr_none                0
 #define tr_readonly    1
@@ -544,7 +545,7 @@ typedef struct sql_idx {
        struct list *columns;   /* list of sql_kc */
        struct sql_table *t;
        struct sql_key *key;    /* key */
-       void *data;
+       ATOMIC_PTR_TYPE data;
 } sql_idx;
 
 /* fkey consists of two of these */
@@ -614,7 +615,7 @@ typedef struct sql_column {
        char *max;
 
        struct sql_table *t;
-       void *data;
+       ATOMIC_PTR_TYPE data;
 } sql_column;
 
 typedef enum table_types {
@@ -695,7 +696,7 @@ typedef struct sql_table {
        changeset members;      /* member tables of merge/replica tables */
        int drop_action;        /* only needed for alter drop table */
 
-       void *data;
+       ATOMIC_PTR_TYPE data;
        struct sql_schema *s;
 
        union {
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
@@ -132,12 +132,12 @@ static sql_delta *
 temp_col_timestamp_delta( sql_trans *tr, sql_column *c)
 {
        assert(isTempTable(c->t));
-       sql_delta *d = temp_delta(c->data, tr->tid);
+       sql_delta *d = temp_delta(ATOMIC_PTR_GET(&c->data), tr->tid);
        if (!d) {
                d = temp_dup_delta(tr->tid, c->type.type->localtype);
                do {
-                       d->next = c->data;
-               } while(!ATOMIC_PTR_CAS(&c->data, &d->next, d)); /* set c->data 
= d, when c->data == d->next else d->next = c->data */
+                       d->next = ATOMIC_PTR_GET(&c->data);
+               } while(!ATOMIC_PTR_CAS(&c->data, (void**)&d->next, d)); /* set 
c->data = d, when c->data == d->next else d->next = c->data */
        }
        return d;
 }
@@ -147,20 +147,20 @@ col_timestamp_delta( sql_trans *tr, sql_
 {
        if (isTempTable(c->t))
                return temp_col_timestamp_delta(tr, c);
-       return timestamp_delta( tr, c->data);
+       return timestamp_delta( tr, ATOMIC_PTR_GET(&c->data));
 }
 
 static sql_delta *
 temp_idx_timestamp_delta( sql_trans *tr, sql_idx *i)
 {
        assert(isTempTable(i->t));
-       sql_delta *d = temp_delta(i->data, tr->tid);
+       sql_delta *d = temp_delta(ATOMIC_PTR_GET(&i->data), tr->tid);
        if (!d) {
                int type = oid_index(i->type)?TYPE_oid:TYPE_lng;
                d = temp_dup_delta(tr->tid, type);
                do {
-                       d->next = i->data;
-               } while(!ATOMIC_PTR_CAS(&i->data, &d->next, d)); /* set i->data 
= d, when i->data == d->next else d->next = i->data */
+                       d->next = ATOMIC_PTR_GET(&i->data);
+               } while(!ATOMIC_PTR_CAS(&i->data, (void**)&d->next, d)); /* set 
i->data = d, when i->data == d->next else d->next = i->data */
        }
        return d;
 }
@@ -170,7 +170,7 @@ idx_timestamp_delta( sql_trans *tr, sql_
 {
        if (isTempTable(i->t))
                return temp_idx_timestamp_delta(tr, i);
-       return timestamp_delta( tr, i->data);
+       return timestamp_delta( tr, ATOMIC_PTR_GET(&i->data));
 }
 
 static sql_dbat *
@@ -185,12 +185,12 @@ static sql_dbat *
 temp_tab_timestamp_dbat( sql_trans *tr, sql_table *t)
 {
        assert(isTempTable(t));
-       sql_dbat *d = temp_dbat(t->data, tr->tid);
+       sql_dbat *d = temp_dbat(ATOMIC_PTR_GET(&t->data), tr->tid);
        if (!d) {
                d = temp_dup_dbat(tr->tid);
                do {
-                       d->next = t->data;
-               } while(!ATOMIC_PTR_CAS(&t->data, &d->next, d)); /* set t->data 
= d, when t->data == d->next else d->next = t->data */
+                       d->next = ATOMIC_PTR_GET(&t->data);
+               } while(!ATOMIC_PTR_CAS(&t->data, (void**)&d->next, d)); /* set 
t->data = d, when t->data == d->next else d->next = t->data */
        }
        return d;
 }
@@ -200,7 +200,7 @@ tab_timestamp_dbat( sql_trans *tr, sql_t
 {
        if (isTempTable(t))
                return temp_tab_timestamp_dbat(tr, t);
-       return timestamp_dbat( tr, t->data);
+       return timestamp_dbat( tr, ATOMIC_PTR_GET(&t->data));
 }
 
 static sql_delta*
@@ -213,16 +213,15 @@ delta_dup(sql_delta *d)
 static void *
 col_dup(sql_column *c)
 {
-       assert(c->data);
-       return delta_dup(c->data);
+       return delta_dup(ATOMIC_PTR_GET(&c->data));
 }
 
 static void *
 idx_dup(sql_idx *i)
 {
-       if (!i->data)
+       if (!ATOMIC_PTR_GET(&i->data))
                return NULL;
-       return delta_dup(i->data);
+       return delta_dup(ATOMIC_PTR_GET(&i->data));
 }
 
 static sql_dbat*
@@ -235,8 +234,7 @@ dbat_dup(sql_dbat *d)
 static void *
 del_dup(sql_table *t)
 {
-       assert(t->data);
-       return dbat_dup(t->data);
+       return dbat_dup(ATOMIC_PTR_GET(&t->data));
 }
 
 static BAT *
@@ -382,7 +380,6 @@ bind_col(sql_trans *tr, sql_column *c, i
        assert(access == QUICK || tr->active);
        if (!isTable(c->t))
                return NULL;
-       assert(c->data);
        if (access == RD_UPD_ID || access == RD_UPD_VAL)
                return bind_ucol(tr, c, access);
        sql_delta *d = col_timestamp_delta(tr, c);
@@ -395,7 +392,6 @@ bind_idx(sql_trans *tr, sql_idx * i, int
        assert(access == QUICK || tr->active);
        if (!isTable(i->t))
                return NULL;
-       assert(i->data);
        if (access == RD_UPD_ID || access == RD_UPD_VAL)
                return bind_uidx(tr, i, access);
        sql_delta *d = idx_timestamp_delta(tr, i);
@@ -772,7 +768,7 @@ destroy_delta(sql_delta *b)
 static sql_delta *
 bind_col_data(sql_trans *tr, sql_column *c)
 {
-       sql_delta *obat = c->data;
+       sql_delta *obat = ATOMIC_PTR_GET(&c->data);
 
        if (isTempTable(c->t))
                obat = temp_col_timestamp_delta(tr, c);
@@ -783,7 +779,7 @@ bind_col_data(sql_trans *tr, sql_column 
                /* abort */
                return NULL;
        assert(!isTempTable(c->t));
-       obat = timestamp_delta(tr, c->data);
+       obat = timestamp_delta(tr, ATOMIC_PTR_GET(&c->data));
        sql_delta* bat = ZNEW(sql_delta);
        if(!bat)
                return NULL;
@@ -793,7 +789,7 @@ bind_col_data(sql_trans *tr, sql_column 
        bat->ts = tr->tid;
        /* only one writer else abort */
        bat->next = obat;
-       if (!ATOMIC_PTR_CAS(&c->data, &bat->next, bat)) {
+       if (!ATOMIC_PTR_CAS(&c->data, (void**)&bat->next, bat)) {
                bat->next = NULL;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to