Use a recursive lock for pthread_once.
bug: 2292366
Change-Id: I9fc8b790dcfcb30ca94a0beb340d43fe5cd6c22e
diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c
index 061cce1..a60da27 100644
--- a/libc/bionic/pthread.c
+++ b/libc/bionic/pthread.c
@@ -1861,15 +1861,15 @@
*/
int pthread_once( pthread_once_t* once_control, void (*init_routine)(void) )
{
- static pthread_mutex_t once_lock = PTHREAD_MUTEX_INITIALIZER;
+ static pthread_mutex_t once_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
if (*once_control == PTHREAD_ONCE_INIT) {
- _normal_lock( &once_lock );
+ pthread_mutex_lock( &once_lock );
if (*once_control == PTHREAD_ONCE_INIT) {
(*init_routine)();
*once_control = ~PTHREAD_ONCE_INIT;
}
- _normal_unlock( &once_lock );
+ pthread_mutex_unlock( &once_lock );
}
return 0;
}