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

Reply via email to