Changeset: 9e0a4ebebf3d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/9e0a4ebebf3d Modified Files: gdk/gdk_bbp.c Branch: default Log Message:
Put all accesses to callback_list inside the lock. diffs (60 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -4431,7 +4431,6 @@ gdk_add_callback(char *name, gdk_callbac { gdk_callback *callback = NULL; - gdk_callback *p = callback_list.head; if (!(callback = GDKmalloc(sizeof(gdk_callback) + sizeof(void *) * argc))) { TRC_CRITICAL(GDK, "Failed to allocate memory!"); @@ -4450,6 +4449,7 @@ gdk_add_callback(char *name, gdk_callbac } MT_lock_set(&GDKCallbackListLock); + gdk_callback *p = callback_list.head; if (p) { int cnt = 1; do { @@ -4483,12 +4483,13 @@ gdk_add_callback(char *name, gdk_callbac gdk_return gdk_remove_callback(char *cb_name, gdk_callback_func *argsfree) { - gdk_callback *curr = callback_list.head; gdk_callback *prev = NULL; gdk_return res = GDK_FAIL; + + MT_lock_set(&GDKCallbackListLock); + gdk_callback *curr = callback_list.head; while(curr) { if (strcmp(cb_name, curr->name) == 0) { - MT_lock_set(&GDKCallbackListLock); if (curr == callback_list.head && prev == NULL) { callback_list.head = curr->next; } else { @@ -4500,12 +4501,12 @@ gdk_remove_callback(char *cb_name, gdk_c curr = NULL; callback_list.cnt -=1; res = GDK_SUCCEED; - MT_lock_unset(&GDKCallbackListLock); } else { prev = curr; curr = curr->next; } } + MT_lock_unset(&GDKCallbackListLock); return res; } @@ -4529,9 +4530,9 @@ should_call(gdk_callback *cb) static void BBPcallbacks(void) { + MT_lock_set(&GDKCallbackListLock); gdk_callback *next = callback_list.head; - MT_lock_set(&GDKCallbackListLock); while (next) { if(should_call(next)) do_callback(next); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org