diff options
Diffstat (limited to 'testsuites/sptests/sptls02/init.cc')
-rw-r--r-- | testsuites/sptests/sptls02/init.cc | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/testsuites/sptests/sptls02/init.cc b/testsuites/sptests/sptls02/init.cc index b15e35856f..dc2e123c40 100644 --- a/testsuites/sptests/sptls02/init.cc +++ b/testsuites/sptests/sptls02/init.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -162,8 +162,24 @@ static void checkTLSValues() static rtems_id masterTask; -static void task(rtems_task_argument arg) +static void wakeUpMaster() { + rtems_status_code sc = rtems_event_transient_send(masterTask); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +static void waitForWorker() +{ + rtems_status_code sc = rtems_event_transient_receive( + RTEMS_WAIT, + RTEMS_NO_TIMEOUT + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +static void worker(rtems_task_argument arg) +{ + wakeUpMaster(); checkTLSValues(); const long gc = static_cast<long>(arg); @@ -182,21 +198,20 @@ static void task(rtems_task_argument arg) a2.clobber(); a3.clobber(); - rtems_status_code sc = rtems_event_transient_send(masterTask); - rtems_test_assert(sc == RTEMS_SUCCESSFUL); + wakeUpMaster(); - sc = rtems_task_suspend(RTEMS_SELF); - rtems_test_assert(sc == RTEMS_SUCCESSFUL); + (void) rtems_task_suspend(RTEMS_SELF); + rtems_test_assert(false); } -static void testTask() +static void testWorkerTask() { checkTLSValues(); rtems_id id; rtems_status_code sc = rtems_task_create( rtems_build_name('T', 'A', 'S', 'K'), - RTEMS_MINIMUM_PRIORITY, + 2, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, @@ -206,12 +221,24 @@ static void testTask() const long gc = A::globalCounter(); - sc = rtems_task_start(id, task, gc); + sc = rtems_task_start(id, worker, gc); rtems_test_assert(sc == RTEMS_SUCCESSFUL); - sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT); + waitForWorker(); + rtems_test_assert(A::globalCounter() == gc); + + waitForWorker(); + rtems_test_assert(A::globalCounter() == gc + 3); + + sc = rtems_task_restart(id, gc); rtems_test_assert(sc == RTEMS_SUCCESSFUL); + waitForWorker(); + rtems_test_assert(A::globalCounter() == gc); + + waitForWorker(); + rtems_test_assert(A::globalCounter() == gc + 3); + sc = rtems_task_delete(id); rtems_test_assert(sc == RTEMS_SUCCESSFUL); @@ -232,12 +259,12 @@ extern "C" void Init(rtems_task_argument arg) masterTask = rtems_task_self(); - testTask(); + testWorkerTask(); rtems_resource_snapshot snapshot; rtems_resource_snapshot_take(&snapshot); - testTask(); + testWorkerTask(); rtems_test_assert(rtems_resource_snapshot_check(&snapshot)); |