Handle cas failure when the compare succeeds
When locking a priority inherit mutex we perform a compare and swap operation to try and acquire the mutex. This may fail even when the compare succeeds. Check and handle this case. PR: 263825 Reviewed by: kib, markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D35150
This commit is contained in:
parent
190abf86bb
commit
11a6ecd425
@ -2262,6 +2262,17 @@ do_lock_pi(struct thread *td, struct umutex *m, uint32_t flags,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Nobody owns it, but the acquire failed. This can happen
|
||||||
|
* with ll/sc atomics.
|
||||||
|
*/
|
||||||
|
if (owner == UMUTEX_UNOWNED) {
|
||||||
|
error = thread_check_susp(td, true);
|
||||||
|
if (error != 0)
|
||||||
|
break;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Avoid overwriting a possible error from sleep due
|
* Avoid overwriting a possible error from sleep due
|
||||||
* to the pending signal with suspension check result.
|
* to the pending signal with suspension check result.
|
||||||
|
Loading…
Reference in New Issue
Block a user