--- cpukit/posix/Makefile.am | 4 +- cpukit/posix/src/condattrgetclock.c | 39 +++++++++++ cpukit/posix/src/condattrsetclock.c | 45 ++++++++++++ testsuites/psxtests/Makefile.am | 2 +- testsuites/psxtests/configure.ac | 1 + testsuites/psxtests/psxcond02/Makefile.am | 24 +++++++ testsuites/psxtests/psxcond02/init.c | 105 ++++++++++++++++++++++++++++ testsuites/psxtests/psxcond02/psxcond02.doc | 27 +++++++ testsuites/psxtests/psxcond02/psxcond02.scn | 12 ++++ 9 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 cpukit/posix/src/condattrgetclock.c create mode 100644 cpukit/posix/src/condattrsetclock.c create mode 100644 testsuites/psxtests/psxcond02/Makefile.am create mode 100644 testsuites/psxtests/psxcond02/init.c create mode 100644 testsuites/psxtests/psxcond02/psxcond02.doc create mode 100644 testsuites/psxtests/psxcond02/psxcond02.scn
diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am index 461e6eb..6495cca 100644 --- a/cpukit/posix/Makefile.am +++ b/cpukit/posix/Makefile.am @@ -83,7 +83,9 @@ libposix_a_SOURCES += src/cancel.c \ ## CONDITION_VARIABLE_C_FILES libposix_a_SOURCES += src/cond.c src/condattrdestroy.c \ - src/condattrgetpshared.c src/condattrinit.c src/condattrsetpshared.c \ + src/condattrinit.c \ + src/condattrgetpshared.c src/condattrsetpshared.c \ + src/condattrgetclock.c src/condattrsetclock.c \ src/condbroadcast.c src/conddefaultattributes.c src/conddestroy.c \ src/condinit.c src/condsignal.c src/condsignalsupp.c \ src/condtimedwait.c src/condwait.c src/condwaitsupp.c src/condget.c diff --git a/cpukit/posix/src/condattrgetclock.c b/cpukit/posix/src/condattrgetclock.c new file mode 100644 index 0000000..d738575 --- /dev/null +++ b/cpukit/posix/src/condattrgetclock.c @@ -0,0 +1,39 @@ +/** + * @file + * + * @brief Get the Clock Condition Variable Attributes + * @ingroup POSIXAPI + */ + +/* + * COPYRIGHT (c) 2016 + * 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. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <pthread.h> +#include <errno.h> + +int pthread_condattr_getclock( + const pthread_condattr_t *__restrict attr, + clockid_t *__restrict clock +) +{ + if ( !attr ) { + return EINVAL; + } + + if ( !clock ) { + return EINVAL; + } + + *clock = attr->clock; + return 0; +} diff --git a/cpukit/posix/src/condattrsetclock.c b/cpukit/posix/src/condattrsetclock.c new file mode 100644 index 0000000..8a4c0a7 --- /dev/null +++ b/cpukit/posix/src/condattrsetclock.c @@ -0,0 +1,45 @@ +/** + * @file + * + * @brief Set the Clock Condition Variable Attributes + * @ingroup POSIXAPI + */ + +/* + * COPYRIGHT (c) 2016. + * 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. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <pthread.h> +#include <errno.h> + +int pthread_condattr_setclock( + pthread_condattr_t *attr, + clockid_t clock +) +{ + if ( !attr ) { + return EINVAL; + } + + switch ( clock ) { + case CLOCK_REALTIME: + case CLOCK_MONOTONIC: + attr->clock = clock; + return 0; + + case CLOCK_PROCESS_CPUTIME_ID: + case CLOCK_THREAD_CPUTIME_ID: + default: + break; + } + return EINVAL; +} diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am index 6dd5649..a3bffb9 100644 --- a/testsuites/psxtests/Makefile.am +++ b/testsuites/psxtests/Makefile.am @@ -7,7 +7,7 @@ _SUBDIRS += psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \ psxaio01 psxaio02 psxaio03 \ psxalarm01 psxautoinit01 psxautoinit02 psxbarrier01 \ psxcancel psxcancel01 psxclassic01 psxcleanup psxcleanup01 \ - psxconcurrency01 psxcond01 psxconfig01 psxenosys \ + psxconcurrency01 psxcond01 psxcond02 psxconfig01 psxenosys \ psxitimer psxmsgq01 psxmsgq02 psxmsgq03 psxmsgq04 \ psxmutexattr01 psxobj01 psxrwlock01 psxsem01 psxsignal01 psxsignal02 \ psxsignal03 psxsignal04 psxsignal05 psxsignal06 \ diff --git a/testsuites/psxtests/configure.ac b/testsuites/psxtests/configure.ac index 779e0b5..be4a21f 100644 --- a/testsuites/psxtests/configure.ac +++ b/testsuites/psxtests/configure.ac @@ -145,6 +145,7 @@ psxclock/Makefile psxclock01/Makefile psxconcurrency01/Makefile psxcond01/Makefile +psxcond02/Makefile psxconfig01/Makefile psxeintr_join/Makefile psxenosys/Makefile diff --git a/testsuites/psxtests/psxcond02/Makefile.am b/testsuites/psxtests/psxcond02/Makefile.am new file mode 100644 index 0000000..82aa29c --- /dev/null +++ b/testsuites/psxtests/psxcond02/Makefile.am @@ -0,0 +1,24 @@ + +rtems_tests_PROGRAMS = psxcond02 +psxcond02_SOURCES = init.c ../include/pmacros.h + +dist_rtems_tests_DATA = psxcond02.scn +dist_rtems_tests_DATA += psxcond02.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + + +AM_CPPFLAGS += -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(psxcond02_OBJECTS) +LINK_LIBS = $(psxcond02_LDLIBS) + +psxcond02$(EXEEXT): $(psxcond02_OBJECTS) \ + $(psxcond02_DEPENDENCIES) + @rm -f psxcond02$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/psxtests/psxcond02/init.c b/testsuites/psxtests/psxcond02/init.c new file mode 100644 index 0000000..6314762 --- /dev/null +++ b/testsuites/psxtests/psxcond02/init.c @@ -0,0 +1,105 @@ +/* + * COPYRIGHT (c) 2016. + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tmacros.h" +#include <pthread.h> +#include <time.h> +#include <errno.h> + +const char rtems_test_name[] = "PSXCOND 2"; + +/* forward declarations to avoid warnings */ +void *POSIX_Init(void *argument); + +static void test_exercise_clock_attribute_errors(void) +{ + int sc; + pthread_condattr_t attr; + clockid_t clock; + + /* NULL attribute pointer errors */ + puts( "pthread_condattr_getclock (NULL attribute) - EINVAL" ); + sc = pthread_condattr_getclock( NULL, &clock ); + fatal_posix_service_status( sc, EINVAL, "condattr getclock" ); + + puts( "pthread_condattr_getclock (NULL clock) - EINVAL" ); + sc = pthread_condattr_getclock( &attr, NULL ); + fatal_posix_service_status( sc, EINVAL, "condattr getclock" ); + + puts( "pthread_condattr_setclock (NULL attribute) - EINVAL" ); + sc = pthread_condattr_setclock( NULL, CLOCK_REALTIME ); + fatal_posix_service_status( sc, EINVAL, "condattr setclock" ); + + /* invalid clock errors */ + puts( "pthread_condattr_init - OK" ); + sc = pthread_condattr_init( &attr ); + fatal_posix_service_status( sc, 0, "condattr init" ); + + puts( "pthread_condattr_setclock (bad clock)- EINVAL" ); + sc = pthread_condattr_setclock( &attr, -1 ); + fatal_posix_service_status( sc, EINVAL, "condattr setclock" ); + + puts( "pthread_condattr_setclock (CLOCK_PROCESS_CPUTIME_ID)- EINVAL" ); + sc = pthread_condattr_setclock( &attr, CLOCK_PROCESS_CPUTIME_ID ); + fatal_posix_service_status( sc, EINVAL, "condattr setclock" ); + + puts( "pthread_condattr_setclock (CLOCK_THREAD_CPUTIME_ID)- EINVAL" ); + sc = pthread_condattr_setclock( &attr, CLOCK_THREAD_CPUTIME_ID ); + fatal_posix_service_status( sc, EINVAL, "condattr setclock" ); +} + +static void test_exercise_clock_attribute(void) +{ + int sc; + pthread_condattr_t attr; + + puts( "pthread_condattr_init - OK" ); + sc = pthread_condattr_init( &attr ); + fatal_posix_service_status( sc, 0, "condattr init" ); + + puts( "pthread_condattr_setclock (CLOCK_REALTIME)- OK" ); + sc = pthread_condattr_setclock( &attr, CLOCK_REALTIME ); + fatal_posix_service_status( sc, 0, "condattr setclock" ); + + puts( "pthread_condattr_setclock (CLOCK_MONOTONIC)- OK" ); + sc = pthread_condattr_setclock( &attr, CLOCK_MONOTONIC ); + fatal_posix_service_status( sc, 0, "condattr setclock" ); +} + +void *POSIX_Init( + void *argument +) +{ + TEST_BEGIN(); + + test_exercise_clock_attribute_errors(); + + test_exercise_clock_attribute(); + + TEST_END(); + rtems_test_exit( 0 ); + + return NULL; /* just so the compiler thinks we returned something */ +} + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_MAXIMUM_POSIX_THREADS 1 + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> diff --git a/testsuites/psxtests/psxcond02/psxcond02.doc b/testsuites/psxtests/psxcond02/psxcond02.doc new file mode 100644 index 0000000..9e6f88a --- /dev/null +++ b/testsuites/psxtests/psxcond02/psxcond02.doc @@ -0,0 +1,27 @@ +# COPYRIGHT (c) 2016 +# 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. +# + +This file describes the directives and concepts tested by this test set. + +test set name: psxcond02 + +directives: + + pthread_condattr_init + pthread_condcondattr_getclock + pthread_condcondattr_setclock + +concepts: + ++ Verify error conditions in pthread_condattr_getclock + ++ Verify error conditions in pthread_condattr_setclock + ++ Verify normal paths through pthread_condattr_getclock + ++ Verify normal paths through pthread_condattr_setclock diff --git a/testsuites/psxtests/psxcond02/psxcond02.scn b/testsuites/psxtests/psxcond02/psxcond02.scn new file mode 100644 index 0000000..511d1f3 --- /dev/null +++ b/testsuites/psxtests/psxcond02/psxcond02.scn @@ -0,0 +1,12 @@ +*** BEGIN OF TEST PSXCOND 2 *** +pthread_condattr_getclock (NULL attribute) - EINVAL +pthread_condattr_getclock (NULL clock) - EINVAL +pthread_condattr_setclock (NULL attribute) - EINVAL +pthread_condattr_init - OK +pthread_condattr_setclock (bad clock)- EINVAL +pthread_condattr_setclock (CLOCK_PROCESS_CPUTIME_ID)- EINVAL +pthread_condattr_setclock (CLOCK_THREAD_CPUTIME_ID)- EINVAL +pthread_condattr_init - OK +pthread_condattr_setclock (CLOCK_REALTIME)- OK +pthread_condattr_setclock (CLOCK_MONOTONIC)- OK +*** END OF TEST PSXCOND 2 *** -- 1.8.3.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel