summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cpukit/posix/src/mutexget.c11
1 files changed, 10 insertions, 1 deletions
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 <rtems/posix/muteximpl.h>
+#include <rtems/score/apimutex.h>
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;