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 const char rtems_test_name[] = "PSXTMCOND 03";
0041
0042
0043 void *POSIX_Init(void *argument);
0044 void *Blocker(void *argument);
0045
0046 pthread_mutex_t MutexID;
0047 pthread_cond_t CondID;
0048
0049 void *Blocker(
0050 void *argument
0051 )
0052 {
0053 int status;
0054
0055 status = pthread_mutex_lock(&MutexID);
0056 rtems_test_assert( status == 0 );
0057
0058
0059 pthread_cond_wait(&CondID,&MutexID);
0060
0061
0062 rtems_test_assert( FALSE );
0063
0064 return NULL;
0065 }
0066
0067 void *POSIX_Init(
0068 void *argument
0069 )
0070 {
0071 int status;
0072 pthread_t threadId;
0073 uint32_t end_time;
0074 struct sched_param param;
0075 int policy;
0076
0077 TEST_BEGIN();
0078
0079 status = pthread_create( &threadId, NULL, Blocker, NULL );
0080 rtems_test_assert( status == 0 );
0081
0082 status = pthread_mutex_init(&MutexID, NULL);
0083 rtems_test_assert( status == 0 );
0084
0085 status = pthread_cond_init(&CondID, NULL);
0086 rtems_test_assert( status == 0 );
0087
0088
0089
0090
0091
0092 sched_yield();
0093
0094
0095
0096 status = pthread_getschedparam(pthread_self(), &policy, ¶m);
0097 rtems_test_assert( status == 0);
0098 param.sched_priority = sched_get_priority_max(policy) - 1;
0099 status = pthread_setschedparam(pthread_self(), policy, ¶m);
0100 rtems_test_assert( status == 0);
0101
0102 benchmark_timer_initialize();
0103 status = pthread_cond_signal(&CondID);
0104 end_time = benchmark_timer_read();
0105 rtems_test_assert( status == 0 );
0106
0107 put_time(
0108 "pthread_cond_signal: thread waiting no preempt",
0109 end_time,
0110 1,
0111 0,
0112 0
0113 );
0114
0115 TEST_END();
0116 rtems_test_exit( 0 );
0117
0118 return NULL;
0119 }
0120
0121
0122
0123 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0124 #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
0125
0126 #define CONFIGURE_MAXIMUM_POSIX_THREADS 2
0127 #define CONFIGURE_POSIX_INIT_THREAD_TABLE
0128
0129 #define CONFIGURE_INIT
0130
0131 #include <rtems/confdefs.h>
0132