mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 11:20:07 +00:00
Document a behavior of an elided pthread_rwlock_unlock
Explain that pthread_rwlock_unlock may crash if called on a lock not held by the current thread.
This commit is contained in:
parent
ce193f551e
commit
739e14f900
@ -1,3 +1,9 @@
|
|||||||
|
2016-10-28 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
|
||||||
|
|
||||||
|
* nptl/pthread_rwlock_unlock.c: Add a comment explaining its
|
||||||
|
behavior when eliding a lock not held by the current thread.
|
||||||
|
* sysdeps/powerpc/nptl/elide.h: Likewise.
|
||||||
|
|
||||||
2016-10-28 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
|
2016-10-28 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
|
||||||
|
|
||||||
[BZ #20728]
|
[BZ #20728]
|
||||||
|
@ -35,6 +35,10 @@ __pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
|
|||||||
|
|
||||||
LIBC_PROBE (rwlock_unlock, 1, rwlock);
|
LIBC_PROBE (rwlock_unlock, 1, rwlock);
|
||||||
|
|
||||||
|
/* Trying to elide an unlocked lock may crash the process. This
|
||||||
|
is expected and is compatible with POSIX.1-2008: "results are
|
||||||
|
undefined if the read-write lock rwlock is not held by the
|
||||||
|
calling thread". */
|
||||||
if (ELIDE_UNLOCK (rwlock->__data.__writer == 0
|
if (ELIDE_UNLOCK (rwlock->__data.__writer == 0
|
||||||
&& rwlock->__data.__nr_readers == 0))
|
&& rwlock->__data.__nr_readers == 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -102,6 +102,9 @@ __elide_unlock (int is_lock_free)
|
|||||||
{
|
{
|
||||||
if (is_lock_free)
|
if (is_lock_free)
|
||||||
{
|
{
|
||||||
|
/* This code is expected to crash when trying to unlock a lock not
|
||||||
|
held by this thread. More information is available in the
|
||||||
|
__pthread_rwlock_unlock() implementation. */
|
||||||
__libc_tend (0);
|
__libc_tend (0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user