[rtems commit] posix: Fix mutex auto initialization
Sebastian Huber
sebh at rtems.org
Wed Oct 8 09:17:50 UTC 2014
Module: rtems
Branch: master
Commit: dfdad6ab1d4a8f51acca0420de3188b5470f7f16
Changeset: http://git.rtems.org/rtems/commit/?id=dfdad6ab1d4a8f51acca0420de3188b5470f7f16
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Wed Oct 8 10:09:14 2014 +0200
posix: Fix mutex auto initialization
Use the once lock to prevent race conditions during auto initialization.
---
cpukit/posix/src/mutexget.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/cpukit/posix/src/mutexget.c b/cpukit/posix/src/mutexget.c
index f683137..41a5495 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;
More information about the vc
mailing list