glibc40/spinaphore.patch
Andrey Bondrov 2bb20c2d90 New version 2.28
Sync patches with OpenMandriva
2019-04-12 16:38:20 +10:00

28 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