The lck_unlock routine will grant pending locks. When those locks are
pending PR locks, we grant all of them.

This patch uses list_splice to pending PR lock requests from
pr_lock_pending_list_head to pr_lock_granted_list_head. Not only is
this method cleaner, but it also fixes a memory error that was showing
up in valgrind.

Index: lck.c
===================================================================
--- lck.c       (revision 1952)
+++ lck.c       (working copy)
@@ -1883,9 +1883,6 @@
                                lock = list_entry (list, struct resource_lock, 
list);
                                lock->lock_status = SA_LCK_LOCK_GRANTED;
 
-                               /* list_del (&lock->list); */
-                               /* list_add_tail (&lock->list, 
&resource->pr_lock_granted_list_head); */
-
                                if (lock->timer_handle != 0) {
                                        api->timer_delete (lock->timer_handle);
                                        lck_resourcelock_response_send (lock, 
SA_AIS_OK);
@@ -1898,10 +1895,10 @@
                        /*
                         * Move pending shared locks to granted list.
                         */
-                       list = resource->pr_lock_pending_list_head.next;
-                       list_del (&resource->pr_lock_pending_list_head);
+                       list_splice (&resource->pr_lock_pending_list_head,
+                               &resource->pr_lock_granted_list_head);
+
                        list_init (&resource->pr_lock_pending_list_head);
-                       list_add_tail (list, 
&resource->pr_lock_granted_list_head);
                }
        }
 }
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to