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