restore lock-skipping for processes that return to single-threaded state
[musl] / src / malloc / malloc.c
index 9698259..a803d4c 100644 (file)
@@ -26,8 +26,11 @@ int __malloc_replaced;
 
 static inline void lock(volatile int *lk)
 {
-       if (libc.threads_minus_1)
+       int need_locks = libc.need_locks;
+       if (need_locks) {
                while(a_swap(lk, 1)) __wait(lk, lk+1, 1, 1);
+               if (need_locks < 0) libc.need_locks = 0;
+       }
 }
 
 static inline void unlock(volatile int *lk)