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>
|
||||
|
||||
[BZ #20728]
|
||||
|
@ -35,6 +35,10 @@ __pthread_rwlock_unlock (pthread_rwlock_t *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
|
||||
&& rwlock->__data.__nr_readers == 0))
|
||||
return 0;
|
||||
|
@ -102,6 +102,9 @@ __elide_unlock (int 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);
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user