diff options
Diffstat (limited to 'cpukit/include/rtems/posix/rwlockimpl.h')
-rw-r--r-- | cpukit/include/rtems/posix/rwlockimpl.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/cpukit/include/rtems/posix/rwlockimpl.h b/cpukit/include/rtems/posix/rwlockimpl.h new file mode 100644 index 0000000000..b92ca9d04c --- /dev/null +++ b/cpukit/include/rtems/posix/rwlockimpl.h @@ -0,0 +1,64 @@ +/** + * @file + * + * @brief Inlined Routines from the POSIX RWLock Manager + * + * This file contains the static inlin implementation of the inlined + * routines from the POSIX RWLock Manager. + */ + +/* + * COPYRIGHT (c) 1989-2011. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifndef _RTEMS_POSIX_RWLOCKIMPL_H +#define _RTEMS_POSIX_RWLOCKIMPL_H + +#include <rtems/score/corerwlockimpl.h> + +#include <errno.h> +#include <pthread.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define POSIX_RWLOCK_MAGIC 0x9621dabdUL + +typedef struct { + unsigned long flags; + CORE_RWLock_Control RWLock; +} POSIX_RWLock_Control; + +RTEMS_INLINE_ROUTINE POSIX_RWLock_Control *_POSIX_RWLock_Get( + pthread_rwlock_t *rwlock +) +{ + return (POSIX_RWLock_Control *) rwlock; +} + +bool _POSIX_RWLock_Auto_initialization( POSIX_RWLock_Control *the_rwlock ); + +#define POSIX_RWLOCK_VALIDATE_OBJECT( rw ) \ + do { \ + if ( ( rw ) == NULL ) { \ + return EINVAL; \ + } \ + if ( ( (uintptr_t) ( rw ) ^ POSIX_RWLOCK_MAGIC ) != ( rw )->flags ) { \ + if ( !_POSIX_RWLock_Auto_initialization( rw ) ) { \ + return EINVAL; \ + } \ + } \ + } while ( 0 ) + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ |