MFC r279283:

When failing to claim ownership of a umtx_pi, restore the umutex owner
to its previous, unowned state.
This commit is contained in:
kib 2015-03-04 09:31:10 +00:00
parent 17814a5b03
commit efbc02bc53

View File

@ -2106,6 +2106,17 @@ do_lock_pi(struct thread *td, struct umutex *m, uint32_t flags,
error = umtx_pi_claim(pi, td);
umtxq_unbusy(&uq->uq_key);
umtxq_unlock(&uq->uq_key);
if (error != 0) {
/*
* Since we're going to return an
* error, restore the m_owner to its
* previous, unowned state to avoid
* compounding the problem.
*/
(void)casuword32(&m->m_owner,
id | UMUTEX_CONTESTED,
UMUTEX_CONTESTED);
}
break;
}