summaryrefslogtreecommitdiffstats
path: root/testsuites/psxtests/psxsem01/init.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-18 06:23:27 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-21 07:29:38 +0200
commit90f1265e5dffe0f834ee9c55640a34fd90be8f12 (patch)
tree93be90c5b980b2be8d07eac95a9a50c539888cfa /testsuites/psxtests/psxsem01/init.c
parentscore: Close barrier object before flush (diff)
downloadrtems-90f1265e5dffe0f834ee9c55640a34fd90be8f12.tar.bz2
score: Fix _CORE_semaphore_Flush()
Use proper CORE_semaphore_Status for _CORE_semaphore_Flush() and _CORE_semaphore_Destroy() operations. Close #2696.
Diffstat (limited to 'testsuites/psxtests/psxsem01/init.c')
-rw-r--r--testsuites/psxtests/psxsem01/init.c52
1 files changed, 51 insertions, 1 deletions
diff --git a/testsuites/psxtests/psxsem01/init.c b/testsuites/psxtests/psxsem01/init.c
index c1752f3a35..24f6d96465 100644
--- a/testsuites/psxtests/psxsem01/init.c
+++ b/testsuites/psxtests/psxsem01/init.c
@@ -27,6 +27,55 @@ void *POSIX_Init(void *argument);
#define MAX_SEMS 10
+static void *sem_wait_task(void *arg)
+{
+ sem_t *sem;
+ int rv;
+
+ sem = arg;
+
+ rv = sem_wait( sem );
+ rtems_test_assert( rv == 0 );
+
+ errno = 0;
+ rv = sem_wait( sem );
+ rtems_test_assert( rv == -1 );
+ rtems_test_assert( errno == EINVAL );
+
+ return NULL;
+}
+
+static void test_sem_wait_during_delete(void)
+{
+ sem_t sem;
+ int rv;
+ pthread_t th;
+ int eno;
+ int val;
+
+ rv = sem_init( &sem, 0, 1 );
+ rtems_test_assert( rv == 0 );
+
+ eno = pthread_create( &th, NULL, sem_wait_task, &sem );
+ rtems_test_assert( eno == 0 );
+
+ rv = sem_getvalue( &sem, &val );
+ rtems_test_assert( rv == 0 );
+ rtems_test_assert( val == 1 );
+
+ sched_yield();
+
+ rv = sem_getvalue( &sem, &val );
+ rtems_test_assert( rv == 0 );
+ rtems_test_assert( val == 0 );
+
+ rv = sem_destroy( &sem );
+ rtems_test_assert( rv == 0 );
+
+ eno = pthread_join( th, NULL );
+ rtems_test_assert( eno == 0 );
+}
+
void *POSIX_Init(
void *argument
)
@@ -295,6 +344,7 @@ void *POSIX_Init(
fatal_posix_service_status( errno, ENOENT, "sem_unlink errno ENOENT");
rtems_test_assert( (status == -1) && (errno == ENOENT) );
+ test_sem_wait_during_delete();
/* Try adding in unlinking before closing... (can we still open?) */
@@ -312,7 +362,7 @@ void *POSIX_Init(
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
-#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 2
#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES MAX_SEMS
#define CONFIGURE_POSIX_INIT_THREAD_TABLE