Changeset: eac76cdd246d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/eac76cdd246d
Modified Files:
        gdk/gdk_system.h
        sql/common/sql_list.c
        sql/common/sql_types.c
        sql/include/sql_list.h
        sql/server/sql_semantic.c
        sql/storage/sql_catalog.c
        sql/storage/store.c
Branch: default
Log Message:

Got rid of the ht_lock field.
The one place where there was potentially a need for the lock has been
changed so that no lock is needed anymore.


diffs (truncated from 423 to 300 lines):

diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -230,51 +230,36 @@ gdk_export void MT_thread_set_qry_ctx(Qr
                TRC_DEBUG(TEM, "Locking %s complete\n", (l)->name);     \
        } while (0)
 
-#define _DBG_LOCK_INIT(l)                                              \
-       do {                                                            \
-               (l)->count = 0;                                         \
-               ATOMIC_INIT(&(l)->contention, 0);                       \
-               ATOMIC_INIT(&(l)->sleep, 0);                            \
-               (l)->locker = NULL;                                     \
-               (l)->thread = NULL;                                     \
-               /* if name starts with "sa_" don't link in GDKlocklist */ \
-               /* since the lock is in memory that is governed by the */ \
-               /* SQL storage allocator, and hence we have no control */ \
-               /* over when the lock is destroyed and the memory freed */ \
-               if (strncmp((l)->name, "sa_", 3) != 0) {                \
-                       while (ATOMIC_TAS(&GDKlocklistlock) != 0)       \
-                               ;                                       \
-                       if (GDKlocklist)                                \
-                               GDKlocklist->prev = (l);                \
-                       (l)->next = GDKlocklist;                        \
-                       (l)->prev = NULL;                               \
-                       GDKlocklist = (l);                              \
-                       ATOMIC_CLEAR(&GDKlocklistlock);                 \
-               } else {                                                \
-                       (l)->next = NULL;                               \
-                       (l)->prev = NULL;                               \
-               }                                                       \
+#define _DBG_LOCK_INIT(l)                                      \
+       do {                                                    \
+               (l)->count = 0;                                 \
+               ATOMIC_INIT(&(l)->contention, 0);               \
+               ATOMIC_INIT(&(l)->sleep, 0);                    \
+               (l)->locker = NULL;                             \
+               (l)->thread = NULL;                             \
+               while (ATOMIC_TAS(&GDKlocklistlock) != 0)       \
+                       ;                                       \
+               if (GDKlocklist)                                \
+                       GDKlocklist->prev = (l);                \
+               (l)->next = GDKlocklist;                        \
+               (l)->prev = NULL;                               \
+               GDKlocklist = (l);                              \
+               ATOMIC_CLEAR(&GDKlocklistlock);                 \
        } while (0)
 
-#define _DBG_LOCK_DESTROY(l)                                           \
-       do {                                                            \
-               /* if name starts with "sa_" don't link in GDKlocklist */ \
-               /* since the lock is in memory that is governed by the */ \
-               /* SQL storage allocator, and hence we have no control */ \
-               /* over when the lock is destroyed and the memory freed */ \
-               if (strncmp((l)->name, "sa_", 3) != 0) {                \
-                       while (ATOMIC_TAS(&GDKlocklistlock) != 0)       \
-                               ;                                       \
-                       if ((l)->next)                                  \
-                               (l)->next->prev = (l)->prev;            \
-                       if ((l)->prev)                                  \
-                               (l)->prev->next = (l)->next;            \
-                       else if (GDKlocklist == (l))                    \
-                               GDKlocklist = (l)->next;                \
-                       ATOMIC_CLEAR(&GDKlocklistlock);                 \
-                       ATOMIC_DESTROY(&(l)->contention);               \
-                       ATOMIC_DESTROY(&(l)->sleep);                    \
-               }                                                       \
+#define _DBG_LOCK_DESTROY(l)                                   \
+       do {                                                    \
+               while (ATOMIC_TAS(&GDKlocklistlock) != 0)       \
+                       ;                                       \
+               if ((l)->next)                                  \
+                       (l)->next->prev = (l)->prev;            \
+               if ((l)->prev)                                  \
+                       (l)->prev->next = (l)->next;            \
+               else if (GDKlocklist == (l))                    \
+                       GDKlocklist = (l)->next;                \
+               ATOMIC_CLEAR(&GDKlocklistlock);                 \
+               ATOMIC_DESTROY(&(l)->contention);               \
+               ATOMIC_DESTROY(&(l)->sleep);                    \
        } while (0)
 
 #else
diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -31,7 +31,6 @@ list_init(list *l, sql_allocator *sa, fd
                        .sa = sa,
                        .destroy = destroy,
                };
-               MT_lock_init(&l->ht_lock, "sa_ht_lock");
        }
        return l;
 }
@@ -109,7 +108,6 @@ list_destroy2(list *l, void *data)
        if (l) {
                node *n = l->h;
 
-               MT_lock_destroy(&l->ht_lock);
                l->h = NULL;
                if (l->destroy || l->sa == NULL) {
                        while (n) {
@@ -153,16 +151,13 @@ list_append_node(list *l, node *n)
        l->t = n;
        l->cnt++;
        if (n->data) {
-               MT_lock_set(&l->ht_lock);
                if (l->ht) {
                        int key = l->ht->key(n->data);
 
                        if (hash_add(l->ht, key, n->data) == NULL) {
-                               MT_lock_unset(&l->ht_lock);
                                return NULL;
                        }
                }
-               MT_lock_unset(&l->ht_lock);
        }
        return l;
 }
@@ -200,16 +195,13 @@ list_append_with_validate(list *l, void 
        }
        l->t = n;
        l->cnt++;
-       MT_lock_set(&l->ht_lock);
        if (l->ht) {
                int key = l->ht->key(data);
 
                if (hash_add(l->ht, key, data) == NULL) {
-                       MT_lock_unset(&l->ht_lock);
                        return NULL;
                }
        }
-       MT_lock_unset(&l->ht_lock);
        return NULL;
 }
 
@@ -251,16 +243,13 @@ list_append_sorted(list *l, void *data, 
                }
        }
        l->cnt++;
-       MT_lock_set(&l->ht_lock);
        if (l->ht) {
                int key = l->ht->key(data);
 
                if (hash_add(l->ht, key, data) == NULL) {
-                       MT_lock_unset(&l->ht_lock);
                        return NULL;
                }
        }
-       MT_lock_unset(&l->ht_lock);
        return NULL;
 }
 
@@ -281,16 +270,13 @@ list_append_before(list *l, node *m, voi
                p->next = n;
        }
        l->cnt++;
-       MT_lock_set(&l->ht_lock);
        if (l->ht) {
                int key = l->ht->key(data);
 
                if (hash_add(l->ht, key, data) == NULL) {
-                       MT_lock_unset(&l->ht_lock);
                        return NULL;
                }
        }
-       MT_lock_unset(&l->ht_lock);
        return l;
 }
 
@@ -307,16 +293,13 @@ list_prepend(list *l, void *data)
        n->next = l->h;
        l->h = n;
        l->cnt++;
-       MT_lock_set(&l->ht_lock);
        if (l->ht) {
                int key = l->ht->key(data);
 
                if (hash_add(l->ht, key, data) == NULL) {
-                       MT_lock_unset(&l->ht_lock);
                        return NULL;
                }
        }
-       MT_lock_unset(&l->ht_lock);
        return l;
 }
 
@@ -357,10 +340,8 @@ list_remove_node_(list *l, node *n)
        if (n == l->t)
                l->t = p;
        if (data) {
-               MT_lock_set(&l->ht_lock);
                if (l->ht && data)
                        hash_delete(l->ht, data);
-               MT_lock_unset(&l->ht_lock);
        }
        l->cnt--;
        assert(l->cnt > 0 || l->h == NULL);
@@ -386,10 +367,8 @@ list_remove_data(list *s, void *gdata, v
                return;
        for (n = s->h; n; n = n->next) {
                if (n->data == data) {
-                       MT_lock_set(&s->ht_lock);
                        if (s->ht && n->data)
                                hash_delete(s->ht, n->data);
-                       MT_lock_unset(&s->ht_lock);
                        n->data = NULL;
                        list_remove_node(s, gdata, n);
                        break;
@@ -413,10 +392,8 @@ list_move_data(list *s, list *d, void *d
 
        for (n = s->h; n; n = n->next) {
                if (n->data == data) {
-                       MT_lock_set(&s->ht_lock);
                        if (s->ht && n->data)
                                hash_delete(s->ht, n->data);
-                       MT_lock_unset(&s->ht_lock);
                        n->data = NULL; /* make sure data isn't destroyed */
                        (void)list_remove_node_(s, n);
                        n->data = data;
@@ -795,10 +772,8 @@ list_hash_delete(list *l, void *data, fc
        if (l && data) {
                node *n = list_find(l, data, cmp);
                if(n) {
-                       MT_lock_set(&l->ht_lock);
                        if (l->ht && n->data)
                                hash_delete(l->ht, data);
-                       MT_lock_unset(&l->ht_lock);
                }
        }
 }
@@ -809,15 +784,12 @@ list_hash_add(list *l, void *data, fcmp 
        if (l && data) {
                node *n = list_find(l, data, cmp);
                if(n) {
-                       MT_lock_set(&l->ht_lock);
                        if (l->ht && n->data) {
                                int nkey = l->ht->key(data);
                                if (hash_add(l->ht, nkey, data) == NULL) {
-                                       MT_lock_unset(&l->ht_lock);
                                        return NULL;
                                }
                        }
-                       MT_lock_unset(&l->ht_lock);
                }
        }
        return data;
@@ -826,9 +798,5 @@ list_hash_add(list *l, void *data, fcmp 
 void
 list_hash_clear(list *l)
 {
-       if (l->ht) {
-               MT_lock_set(&l->ht_lock);
-               l->ht = NULL;
-               MT_lock_unset(&l->ht_lock);
-       }
+       l->ht = NULL;
 }
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -1518,8 +1518,6 @@ types_init(sql_allocator *sa)
        types = sa_list(sa);
        localtypes = sa_list(sa);
        funcs = sa_list(sa);
-       MT_lock_set(&funcs->ht_lock);
        funcs->ht = hash_new(sa, 1024, (fkeyvalue)&base_key);
-       MT_lock_unset(&funcs->ht_lock);
        sqltypeinit( sa );
 }
diff --git a/sql/include/sql_list.h b/sql/include/sql_list.h
--- a/sql/include/sql_list.h
+++ b/sql/include/sql_list.h
@@ -24,7 +24,6 @@ typedef void (*fdestroy) (void *gdata, v
 typedef struct list {
        sql_allocator *sa;
        sql_hash *ht;
-       MT_Lock ht_lock;        /* latch protecting ht */
        fdestroy destroy;
        node *h;
        node *t;
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -297,7 +297,6 @@ sql_find_func_internal(mvc *sql, list *f
        sql_ftype filt = (type == F_FUNC)?F_FILT:type;
 
        if (ff) {
-               MT_lock_set(&ff->ht_lock);
                if (ff->ht) {
                        sql_hash_e *he = ff->ht->buckets[key&(ff->ht->size-1)];
                        if (prev) {
@@ -311,13 +310,10 @@ sql_find_func_internal(mvc *sql, list *f
                                if (f->type != type && f->type != filt)
                                        continue;
                                if ((res = func_cmp(sql->sa, f, fname, nrargs)) 
!= NULL) {
-                                       MT_lock_unset(&ff->ht_lock);
                                        return res;
                                }
                        }
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to