diff options
Diffstat (limited to 'testsuites/psxtests/psxsignal06/init.c')
-rw-r--r-- | testsuites/psxtests/psxsignal06/init.c | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/testsuites/psxtests/psxsignal06/init.c b/testsuites/psxtests/psxsignal06/init.c new file mode 100644 index 0000000000..ba513e8220 --- /dev/null +++ b/testsuites/psxtests/psxsignal06/init.c @@ -0,0 +1,124 @@ +/* + * COPYRIGHT (c) 1989-2010. + * 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.com/license/LICENSE. + * + * $Id$ + */ + +#include <tmacros.h> +#include "test_support.h" +#include <pthread.h> +#include <errno.h> + +pthread_t ThreadId; +pthread_cond_t CondVarId; +pthread_mutex_t MutexId; + +void Handler( + int signo +) +{ +} + +void *TestThread( + void *argument +) +{ + int status; + sigset_t mask; + struct sigaction act; + unsigned int left; + + /* unblock SIGUSR1 */ + status = sigemptyset( &mask ); + rtems_test_assert( !status ); + + status = sigaddset( &mask, SIGUSR1 ); + rtems_test_assert( !status ); + + puts( "Test: Unblock SIGUSR1" ); + status = sigprocmask( SIG_UNBLOCK, &mask, NULL ); + rtems_test_assert( !status ); + + /* install a signal handler for SIGUSR1 */ + act.sa_handler = Handler; + act.sa_flags = 0; + sigaction( SIGUSR1, &act, NULL ); + + /* interrupting condition wait returns 0 */ + puts( "Test: pthread_cond_wait - OK" ); + status = pthread_cond_wait( &CondVarId, &MutexId ); + rtems_test_assert( !status ); + puts( "Test: pthread_cond_wait - interrupted by signal" ); + + left = sleep( 10 ); + printf( "Test: seconds left=%d\n", left ); + + return NULL; +} + +void *POSIX_Init( + rtems_task_argument argument +) +{ + int status; + + puts( "\n\n*** POSIX TEST SIGNAL 06 ***" ); + + puts( "Init: pthread_cond_init - OK" ); + status = pthread_cond_init( &CondVarId, NULL ); + rtems_test_assert( !status ); + + puts( "Init: pthread_mutex_init - OK" ); + status = pthread_mutex_init( &MutexId, NULL ); + rtems_test_assert( !status ); + + puts( "Init: pthread_create - OK" ); + status = pthread_create( &ThreadId, NULL, TestThread, NULL ); + rtems_test_assert( !status ); + + sleep( 1 ); + + /* let TestThread run */ + + puts( "Init: pthread_kill - SIGUSR to Test Thread - OK" ); + status = pthread_kill( ThreadId, SIGUSR1 ); + rtems_test_assert( !status ); + + sleep( 2 ); + + /* let TestThread run */ + + puts( "Init: pthread_kill - SIGUSR to Test Thread - OK" ); + status = pthread_kill( ThreadId, SIGUSR1 ); + rtems_test_assert( !status ); + + sleep( 1 ); + + /* let TestThread run */ + + + + puts( "*** END OF POSIX TEST SIGNAL 06 ***" ); + + rtems_test_exit(0); +} + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_POSIX_THREADS 2 +#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 2 +#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 1 + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> +/* end of file */ |