Changeset: e2ebc1652af0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e2ebc1652af0
Modified Files:
        gdk/gdk.h
        gdk/gdk_bbp.c
Branch: strheapvacuum
Log Message:

fix callback list lock


diffs (86 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2390,12 +2390,6 @@ typedef struct gdk_callback {
        void *argv[FLEXIBLE_ARRAY_MEMBER];
 } gdk_callback;
 
-typedef struct gdk_callback_list {
-       int cnt;
-       MT_Lock lock;
-       gdk_callback *head;
-} gdk_callback_list;
-
 typedef gdk_return gdk_callback_func(int argc, void *argv[]);
 
 gdk_return gdk_add_callback(char *name, gdk_callback_func *f, int argc, void
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -4298,10 +4298,14 @@ gdk_bbp_reset(void)
        backup_subdir = 0;
 }
 
-static gdk_callback_list callback_list = {
+static MT_Lock GDKCallbackListLock = MT_LOCK_INITIALIZER(GDKCallbackListLock);
+
+static struct {
+       int cnt;
+       gdk_callback *head;
+} callback_list = {
        .cnt = 0,
        .head = NULL,
-       .lock=MT_LOCK_INITIALIZER(GDKCallbackListLock),
 };
 
 /*
@@ -4332,7 +4336,7 @@ gdk_add_callback(char *name, gdk_callbac
                callback->argv[i] = argv[i];
        }
 
-       MT_lock_set(&(callback_list.lock));
+       MT_lock_set(&GDKCallbackListLock);
        if (p) {
                int cnt = 1;
                do {
@@ -4352,7 +4356,7 @@ gdk_add_callback(char *name, gdk_callbac
                callback_list.cnt = 1;
                callback_list.head = callback;
        }
-       MT_lock_unset(&(callback_list.lock));
+       MT_lock_unset(&GDKCallbackListLock);
        return GDK_SUCCEED;
 }
 
@@ -4368,7 +4372,7 @@ gdk_remove_callback(char *cb_name, gdk_c
        gdk_return res = GDK_FAIL;
        while(curr) {
                if (strcmp(cb_name, curr->name) == 0) {
-                       MT_lock_set(&(callback_list.lock));
+                       MT_lock_set(&GDKCallbackListLock);
                        if (curr == callback_list.head && prev == NULL) {
                                callback_list.head = curr->next;
                        } else {
@@ -4380,7 +4384,7 @@ gdk_remove_callback(char *cb_name, gdk_c
                        curr = NULL;
                        callback_list.cnt -=1;
                        res = GDK_SUCCEED;
-                       MT_lock_unset(&(callback_list.lock));
+                       MT_lock_unset(&GDKCallbackListLock);
                } else {
                        prev = curr;
                        curr = curr->next;
@@ -4411,11 +4415,11 @@ BBPcallbacks(void)
 {
        gdk_callback *next = callback_list.head;
 
-       MT_lock_set(&(callback_list.lock));
+       MT_lock_set(&GDKCallbackListLock);
        while (next) {
                if(should_call(next))
                        do_callback(next);
                next = next->next;
        }
-       MT_lock_unset(&(callback_list.lock));
+       MT_lock_unset(&GDKCallbackListLock);
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to