mirror of
https://abf.rosa.ru/djam/glibc33.git
synced 2025-02-24 18:22:59 +00:00
29 lines
717 B
Diff
29 lines
717 B
Diff
![]() |
--- glibc-2.23/nptl/pthread_mutex_lock.c.org 2016-03-03 22:33:24.230342596 -0500
|
||
|
+++ glibc-2.23/nptl/pthread_mutex_lock.c 2016-03-03 22:43:18.285915880 -0500
|
||
|
@@ -75,9 +75,22 @@
|
||
|
if (__glibc_likely (type == PTHREAD_MUTEX_TIMED_NP))
|
||
|
{
|
||
|
FORCE_ELISION (mutex, goto elision);
|
||
|
- simple:
|
||
|
- /* Normal mutex. */
|
||
|
- LLL_MUTEX_LOCK (mutex);
|
||
|
+ if (LLL_MUTEX_TRYLOCK (mutex) != 0)
|
||
|
+ {
|
||
|
+ int cnt = 0;
|
||
|
+ do
|
||
|
+ {
|
||
|
+ if (cnt++ >= 256 || !__is_smp)
|
||
|
+ {
|
||
|
+ /* Normal mutex. */
|
||
|
+simple:
|
||
|
+ LLL_MUTEX_LOCK (mutex);
|
||
|
+ break;
|
||
|
+ }
|
||
|
+ atomic_spin_nop ();
|
||
|
+ }
|
||
|
+ while (LLL_MUTEX_TRYLOCK (mutex) != 0);
|
||
|
+ }
|
||
|
assert (mutex->__data.__owner == 0);
|
||
|
}
|
||
|
#ifdef HAVE_ELISION
|