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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list