Some software think a mutex can be destroyed after it owned it, for
example, it uses a serialization point like following: pthread_mutex_lock(&mutex); pthread_mutex_unlock(&mutex); pthread_mutex_destroy(&muetx); They think a previous lock holder should have already left the mutex and is no longer referencing it, so they destroy it. To be maximum compatible with such code, we use IA64 version to unlock the mutex in kernel, remove the two steps unlocking code.
This commit is contained in:
parent
1d73bec4c1
commit
1b008f5e51
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=233103
@ -154,13 +154,6 @@ __thr_umutex_timedlock(struct umutex *mtx, uint32_t id,
|
||||
int
|
||||
__thr_umutex_unlock(struct umutex *mtx, uint32_t id)
|
||||
{
|
||||
#ifndef __ia64__
|
||||
/* XXX this logic has a race-condition on ia64. */
|
||||
if ((mtx->m_flags & (UMUTEX_PRIO_PROTECT | UMUTEX_PRIO_INHERIT)) == 0) {
|
||||
atomic_cmpset_rel_32(&mtx->m_owner, id | UMUTEX_CONTESTED, UMUTEX_CONTESTED);
|
||||
return _umtx_op_err(mtx, UMTX_OP_MUTEX_WAKE, 0, 0, 0);
|
||||
}
|
||||
#endif /* __ia64__ */
|
||||
return _umtx_op_err(mtx, UMTX_OP_MUTEX_UNLOCK, 0, 0, 0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user