File indexing completed on 2025-05-11 08:24:41
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032
0033 #include <tmacros.h>
0034 #include <timesys.h>
0035 #include "test_support.h"
0036 #include <pthread.h>
0037 #include <sched.h>
0038 #include <rtems/btimer.h>
0039
0040 #define N 1
0041
0042 const char rtems_test_name[] = "PSXTMCOND 07";
0043
0044
0045 void *POSIX_Init(void *argument);
0046 void *Blocker(void *argument);
0047
0048 pthread_mutex_t MutexID;
0049 pthread_cond_t CondID;
0050
0051 void *Blocker(
0052 void *argument
0053 )
0054 {
0055 int status;
0056 benchmark_timer_t end_time;
0057
0058 status = pthread_mutex_lock(&MutexID);
0059 rtems_test_assert( status == 0 );
0060
0061
0062 pthread_cond_wait(&CondID,&MutexID);
0063
0064 end_time = benchmark_timer_read();
0065 put_time(
0066 "pthread_cond_broadcast: threads waiting, preempt",
0067 end_time,
0068 1,
0069 0,
0070 0
0071 );
0072
0073 TEST_END();
0074 rtems_test_exit( 0 );
0075 return NULL;
0076
0077 }
0078
0079 void *POSIX_Init(
0080 void *argument
0081 )
0082 {
0083 int status;
0084 int i;
0085 pthread_t threadId;
0086 pthread_attr_t attr;
0087 struct sched_param param;
0088
0089 TEST_BEGIN();
0090
0091
0092 status = pthread_create( &threadId, NULL, Blocker, NULL );
0093 rtems_test_assert( status == 0 );
0094
0095 status = pthread_mutex_init(&MutexID, NULL);
0096 rtems_test_assert( status == 0 );
0097
0098 status = pthread_cond_init(&CondID, NULL);
0099 rtems_test_assert( status == 0 );
0100
0101
0102
0103
0104 status = pthread_attr_init( &attr );
0105 rtems_test_assert( status == 0 );
0106
0107 status = pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
0108 rtems_test_assert( status == 0 );
0109
0110 status = pthread_attr_setschedpolicy( &attr, SCHED_FIFO );
0111 rtems_test_assert( status == 0 );
0112
0113 param.sched_priority = sched_get_priority_max(SCHED_FIFO);
0114 status = pthread_attr_setschedparam( &attr, ¶m );
0115 rtems_test_assert( status == 0 );
0116
0117 for ( i=0 ; i < N ; i++ ) {
0118
0119 status = pthread_create(&threadId, &attr, Blocker, NULL);
0120 rtems_test_assert( status == 0 );
0121 }
0122
0123
0124
0125
0126 benchmark_timer_initialize();
0127 status = pthread_cond_broadcast(&CondID);
0128
0129
0130 rtems_test_assert( FALSE );
0131 return NULL;
0132 }
0133
0134
0135
0136 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0137 #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
0138
0139 #define CONFIGURE_MAXIMUM_POSIX_THREADS 2 + N
0140 #define CONFIGURE_POSIX_INIT_THREAD_TABLE
0141
0142 #define CONFIGURE_INIT
0143
0144 #include <rtems/confdefs.h>
0145