If a callback is set to NULL and a message is received for that
callback, libSaLck will get into a tight loop because the continue
doesn't call coroipcc_dispatch_put.
This patch fixes
Chrissie
Index: lib/lck.c
===================================================================
--- lib/lck.c (revision 2097)
+++ lib/lck.c (working copy)
@@ -332,7 +332,7 @@
if (dispatchFlags == CPG_DISPATCH_ALL) {
break;
} else {
- continue;
+ goto dispatch_continue;
}
}
if (error != CS_OK) {
@@ -345,7 +345,7 @@
switch (dispatch_data->id) {
case MESSAGE_RES_LCK_RESOURCEOPEN_CALLBACK:
if (callbacks.saLckResourceOpenCallback == NULL) {
- continue;
+ goto dispatch_continue;
}
res_lib_lck_resourceopen_callback =
(struct res_lib_lck_resourceopen_callback
*)dispatch_data;
@@ -374,7 +374,7 @@
case MESSAGE_RES_LCK_LOCKGRANT_CALLBACK:
if (callbacks.saLckLockGrantCallback == NULL) {
- continue;
+ goto dispatch_continue;
}
res_lib_lck_lockgrant_callback =
(struct res_lib_lck_lockgrant_callback
*)dispatch_data;
@@ -421,7 +421,7 @@
case MESSAGE_RES_LCK_LOCKWAITER_CALLBACK:
if (callbacks.saLckLockWaiterCallback == NULL) {
- continue;
+ goto dispatch_continue;
}
res_lib_lck_lockwaiter_callback =
(struct res_lib_lck_lockwaiter_callback
*)dispatch_data;
@@ -451,7 +451,7 @@
case MESSAGE_RES_LCK_RESOURCEUNLOCK_CALLBACK:
if (callbacks.saLckResourceUnlockCallback == NULL) {
- continue;
+ goto dispatch_continue;
}
res_lib_lck_resourceunlock_callback =
(struct res_lib_lck_resourceunlock_callback
*)dispatch_data;
@@ -498,6 +498,7 @@
default:
break;
}
+ dispatch_continue:
coroipcc_dispatch_put (lckInstance->ipc_handle);
switch (dispatchFlags) {
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais