diff options
Diffstat (limited to 'cpukit/posix')
-rw-r--r-- | cpukit/posix/src/mutexget.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/cpukit/posix/src/mutexget.c b/cpukit/posix/src/mutexget.c index 5ad33b8c7a..7dec12bb10 100644 --- a/cpukit/posix/src/mutexget.c +++ b/cpukit/posix/src/mutexget.c @@ -34,20 +34,23 @@ * PTHREAD_MUTEX_INITIALIZER without adding overhead. */ -#define ___POSIX_Mutex_Get_support( _id, _location ) \ +#define ___POSIX_Mutex_Get_support_error_check( _id, _location ) \ do { \ - int _status; \ - \ if ( !_id ) { \ *_location = OBJECTS_ERROR; \ return (POSIX_Mutex_Control *) 0; \ } \ + } while (0) + +#define ___POSIX_Mutex_Get_support_auto_initialization( _id, _location ) \ + do { \ + int _status; \ \ if ( *_id == PTHREAD_MUTEX_INITIALIZER ) { \ /* \ * Do an "auto-create" here. \ */ \ - \ + \ _status = pthread_mutex_init( (pthread_mutex_t *)_id, 0 ); \ if ( _status ) { \ *_location = OBJECTS_ERROR; \ @@ -61,7 +64,9 @@ POSIX_Mutex_Control *_POSIX_Mutex_Get ( Objects_Locations *location ) { - ___POSIX_Mutex_Get_support( mutex, location ); + ___POSIX_Mutex_Get_support_error_check( mutex, location ); + + ___POSIX_Mutex_Get_support_auto_initialization( mutex, location ); return (POSIX_Mutex_Control *) _Objects_Get( &_POSIX_Mutex_Information, (Objects_Id) *mutex, location ); @@ -73,7 +78,9 @@ POSIX_Mutex_Control *_POSIX_Mutex_Get_interrupt_disable ( ISR_Level *level ) { - ___POSIX_Mutex_Get_support( mutex, location ); + ___POSIX_Mutex_Get_support_error_check( mutex, location ); + + ___POSIX_Mutex_Get_support_auto_initialization( mutex, location ); return (POSIX_Mutex_Control *) _Objects_Get_isr_disable( &_POSIX_Mutex_Information, |