If a lock request specifies the SA_LCK_LOCK_NO_QUEUE flag and the
request is blocked, the lock is not queued and lock_status is set to
SA_LCK_LOCK_NOT_QUEUED and a response should be sent to the library.
The existing code does not send a response to the library as
needed. In short, the existing code could create a timer (and the call
would block) whenever the status != SA_LCK_LOCK_GRANTED. This patch
fixes the problem.
Thanks for Honzaf for finding this bug.
Ryan
Index: lck.c
===================================================================
--- lck.c (revision 1949)
+++ lck.c (working copy)
@@ -2349,7 +2349,10 @@
error_exit:
if (api->ipc_source_is_local (&req_exec_lck_resourcelock->source))
{
- if ((lock != NULL) && (lock->lock_status !=
SA_LCK_LOCK_GRANTED)) {
+ if ((lock != NULL) &&
+ (lock->lock_status != SA_LCK_LOCK_GRANTED) &&
+ (lock->lock_status != SA_LCK_LOCK_NOT_QUEUED))
+ {
api->timer_add_duration (
req_exec_lck_resourcelock->timeout, (void
*)(lock),
lck_resourcelock_timeout, &lock->timer_handle);
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais