summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-12-02 13:39:40 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-12-02 13:56:04 +0100
commitb07e642a2b1249cd64048c5e9f5e45254df7ae65 (patch)
tree1ce30224334aedc69ee95cce0cef460bd4936201
parentscore: Fix ARM and PowerPC context initialization (diff)
downloadrtems-b07e642a2b1249cd6404.tar.bz2
smpthreadlife01: Fix due to robust thread dispatch
Update #2811.
-rw-r--r--testsuites/smptests/smpthreadlife01/init.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/testsuites/smptests/smpthreadlife01/init.c b/testsuites/smptests/smpthreadlife01/init.c
index 2867be75c5..8b9079ca8f 100644
--- a/testsuites/smptests/smpthreadlife01/init.c
+++ b/testsuites/smptests/smpthreadlife01/init.c
@@ -265,10 +265,6 @@ static void delay_switch_task(rtems_task_argument arg)
{
test_context *ctx = &test_instance;
rtems_status_code sc;
- ISR_Level level;
-
- _ISR_Local_disable(level);
- (void) level;
ctx->delay_switch_for_executing = _Thread_Get_executing();
@@ -331,34 +327,42 @@ typedef enum {
static void op_begin_suspend(void)
{
- rtems_task_suspend(RTEMS_SELF);
- rtems_test_assert(0);
+ rtems_status_code sc;
+
+ sc = rtems_task_suspend(RTEMS_SELF);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
static void op_begin_event(void)
{
+ rtems_status_code sc;
rtems_event_set events;
- rtems_event_receive(
+ events = 0;
+ sc = rtems_event_receive(
RTEMS_EVENT_0,
RTEMS_EVENT_ALL | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&events
);
- rtems_test_assert(0);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(events == RTEMS_EVENT_0);
}
static void op_begin_event_system(void)
{
+ rtems_status_code sc;
rtems_event_set events;
- rtems_event_system_receive(
+ events = 0;
+ sc = rtems_event_system_receive(
RTEMS_EVENT_0,
RTEMS_EVENT_ALL | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&events
);
- rtems_test_assert(0);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(events == RTEMS_EVENT_0);
}
static void (*const test_ops_begin[])(void) = {
@@ -401,10 +405,9 @@ static void op_worker_task(rtems_task_argument arg)
{
test_context *ctx = &test_instance;
test_op op = arg;
- ISR_Level level;
+ Thread_Life_state previous_life_state;
- _ISR_Local_disable(level);
- (void) level;
+ previous_life_state = _Thread_Set_life_protection(THREAD_LIFE_PROTECTED);
/* (E) */
barrier(ctx, &ctx->worker_barrier_state);
@@ -413,6 +416,9 @@ static void op_worker_task(rtems_task_argument arg)
barrier(ctx, &ctx->worker_barrier_state);
(*test_ops_begin[op])();
+
+ _Thread_Set_life_protection(previous_life_state);
+ rtems_test_assert(0);
}
static void help_task(rtems_task_argument arg)