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