posix: Fix rwlock auto initialization

Add more test cases.
This commit is contained in:
Sebastian Huber
2018-07-16 08:31:05 +02:00
parent 00a19d6f92
commit 6ec7f2102e
4 changed files with 50 additions and 1 deletions

View File

@@ -35,7 +35,7 @@ bool _POSIX_RWLock_Auto_initialization( POSIX_RWLock_Control *the_rwlock )
return false; return false;
} }
the_rwlock->flags = POSIX_RWLOCK_MAGIC; the_rwlock->flags = (uintptr_t) the_rwlock ^ POSIX_RWLOCK_MAGIC;
return true; return true;
} }

View File

@@ -374,6 +374,12 @@ static void test_mutex_auto_initialization( void )
eno = pthread_mutex_lock( &mutex ); eno = pthread_mutex_lock( &mutex );
rtems_test_assert( eno == 0 ); rtems_test_assert( eno == 0 );
eno = pthread_mutex_unlock( &mutex );
rtems_test_assert( eno == 0 );
eno = pthread_mutex_destroy( &mutex );
rtems_test_assert( eno == 0 );
} }
{ {

View File

@@ -51,6 +51,41 @@ void *BlockingThread(
return NULL; return NULL;
} }
static void test_cond_auto_initialization( void )
{
int eno;
{
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
eno = pthread_cond_destroy( &cond );
rtems_test_assert( eno == 0 );
eno = pthread_cond_destroy( &cond );
rtems_test_assert( eno == EINVAL );
}
{
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
eno = pthread_cond_signal( &cond );
rtems_test_assert( eno == 0 );
eno = pthread_cond_destroy( &cond );
rtems_test_assert( eno == 0 );
}
{
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
eno = pthread_cond_broadcast( &cond );
rtems_test_assert( eno == 0 );
eno = pthread_cond_destroy( &cond );
rtems_test_assert( eno == 0 );
}
}
void *POSIX_Init( void *POSIX_Init(
void *argument void *argument
) )
@@ -60,6 +95,8 @@ void *POSIX_Init(
TEST_BEGIN(); TEST_BEGIN();
test_cond_auto_initialization();
puts( "Init - pthread_mutex_init - Mutex1 - OK" ); puts( "Init - pthread_mutex_init - Mutex1 - OK" );
sc = pthread_mutex_init( &Mutex1, NULL ); sc = pthread_mutex_init( &Mutex1, NULL );
fatal_posix_service_status( sc, 0, "mutex1 create ok" ); fatal_posix_service_status( sc, 0, "mutex1 create ok" );

View File

@@ -259,6 +259,12 @@ static void test_rwlock_auto_initialization( void )
eno = pthread_rwlock_rdlock( &rw ); eno = pthread_rwlock_rdlock( &rw );
rtems_test_assert( eno == 0 ); rtems_test_assert( eno == 0 );
eno = pthread_rwlock_unlock( &rw );
rtems_test_assert( eno == 0 );
eno = pthread_rwlock_destroy( &rw );
rtems_test_assert( eno == 0 );
} }
{ {