From dfdad6ab1d4a8f51acca0420de3188b5470f7f16 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 8 Oct 2014 10:09:14 +0200 Subject: posix: Fix mutex auto initialization Use the once lock to prevent race conditions during auto initialization. --- cpukit/posix/src/mutexget.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cpukit/posix/src/mutexget.c b/cpukit/posix/src/mutexget.c index f683137655..41a5495fa2 100644 --- a/cpukit/posix/src/mutexget.c +++ b/cpukit/posix/src/mutexget.c @@ -19,6 +19,7 @@ #endif #include +#include static bool _POSIX_Mutex_Check_id_and_auto_init( pthread_mutex_t *mutex, @@ -34,7 +35,15 @@ static bool _POSIX_Mutex_Check_id_and_auto_init( if ( *mutex == PTHREAD_MUTEX_INITIALIZER ) { int eno; - eno = pthread_mutex_init( mutex, NULL ); + _Once_Lock(); + + if ( *mutex == PTHREAD_MUTEX_INITIALIZER ) { + eno = pthread_mutex_init( mutex, NULL ); + } else { + eno = 0; + } + + _Once_Unlock(); if ( eno != 0 ) { *location = OBJECTS_ERROR; -- cgit v1.2.3