X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/9bccf70c0258c7cac2dcb80011b2a964d884c552..ac5ea4a98a4e1d34a076095ea1eaa87e43d1f335:/osfmk/kern/wait_queue.c diff --git a/osfmk/kern/wait_queue.c b/osfmk/kern/wait_queue.c index d44cd9ec9..627bf793c 100644 --- a/osfmk/kern/wait_queue.c +++ b/osfmk/kern/wait_queue.c @@ -408,12 +408,14 @@ wait_queue_link_noalloc( */ s = splsched(); wait_queue_lock(wq); + wqs_lock(wq_set); q = &wq->wq_queue; wq_element = (wait_queue_element_t) queue_first(q); while (!queue_end(q, (queue_entry_t)wq_element)) { WAIT_QUEUE_ELEMENT_CHECK(wq, wq_element); if (wq_element->wqe_type == WAIT_QUEUE_LINK && ((wait_queue_link_t)wq_element)->wql_setqueue == wq_set) { + wqs_unlock(wq_set); wait_queue_unlock(wq); splx(s); return KERN_ALREADY_IN_SET; @@ -425,7 +427,6 @@ wait_queue_link_noalloc( /* * Not already a member, so we can add it. */ - wqs_lock(wq_set); WAIT_QUEUE_SET_CHECK(wq_set);