forked from Imagelibrary/rtems
sptests/spthreadlife01: Add self delete test case
This commit is contained in:
@@ -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
|
* embedded brains GmbH
|
||||||
* Dornierstr. 4
|
* Dornierstr. 4
|
||||||
@@ -27,6 +27,7 @@
|
|||||||
#define PRIO_HIGH 2
|
#define PRIO_HIGH 2
|
||||||
#define PRIO_MID 3
|
#define PRIO_MID 3
|
||||||
#define PRIO_LOW 4
|
#define PRIO_LOW 4
|
||||||
|
#define PRIO_VERY_LOW 5
|
||||||
|
|
||||||
const char rtems_test_name[] = "SPTHREADLIFE 1";
|
const char rtems_test_name[] = "SPTHREADLIFE 1";
|
||||||
|
|
||||||
@@ -56,6 +57,10 @@ typedef enum {
|
|||||||
DELETE_4,
|
DELETE_4,
|
||||||
DELETE_5,
|
DELETE_5,
|
||||||
DELETE_6,
|
DELETE_6,
|
||||||
|
DELETE_SELF,
|
||||||
|
DELETE_7,
|
||||||
|
DELETE_8,
|
||||||
|
DELETE_9,
|
||||||
INVALID
|
INVALID
|
||||||
} test_state;
|
} test_state;
|
||||||
|
|
||||||
@@ -167,15 +172,19 @@ static void delete_extension(
|
|||||||
rtems_test_assert(executing != deleted);
|
rtems_test_assert(executing != deleted);
|
||||||
rtems_test_assert(ctx->main_task_id == rtems_task_self());
|
rtems_test_assert(ctx->main_task_id == rtems_task_self());
|
||||||
|
|
||||||
assert_priority(PRIO_INIT);
|
|
||||||
|
|
||||||
switch (ctx->current) {
|
switch (ctx->current) {
|
||||||
case DELETE_2:
|
case DELETE_2:
|
||||||
|
assert_priority(PRIO_INIT);
|
||||||
ctx->current = DELETE_3;
|
ctx->current = DELETE_3;
|
||||||
break;
|
break;
|
||||||
case DELETE_5:
|
case DELETE_5:
|
||||||
|
assert_priority(PRIO_INIT);
|
||||||
ctx->current = DELETE_6;
|
ctx->current = DELETE_6;
|
||||||
break;
|
break;
|
||||||
|
case DELETE_8:
|
||||||
|
assert_priority(PRIO_VERY_LOW);
|
||||||
|
ctx->current = DELETE_9;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
rtems_test_assert(0);
|
rtems_test_assert(0);
|
||||||
break;
|
break;
|
||||||
@@ -189,20 +198,26 @@ static void terminate_extension(Thread_Control *executing)
|
|||||||
|
|
||||||
rtems_test_assert(ctx->worker_task_id == rtems_task_self());
|
rtems_test_assert(ctx->worker_task_id == rtems_task_self());
|
||||||
|
|
||||||
assert_priority(PRIO_INIT);
|
|
||||||
|
|
||||||
switch (ctx->current) {
|
switch (ctx->current) {
|
||||||
case DELETE_0:
|
case DELETE_0:
|
||||||
|
assert_priority(PRIO_INIT);
|
||||||
ctx->current = DELETE_1;
|
ctx->current = DELETE_1;
|
||||||
sc = rtems_task_delete(RTEMS_SELF);
|
sc = rtems_task_delete(RTEMS_SELF);
|
||||||
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
||||||
break;
|
break;
|
||||||
case DELETE_1:
|
case DELETE_1:
|
||||||
|
assert_priority(PRIO_INIT);
|
||||||
ctx->current = DELETE_2;
|
ctx->current = DELETE_2;
|
||||||
break;
|
break;
|
||||||
case DELETE_4:
|
case DELETE_4:
|
||||||
|
assert_priority(PRIO_INIT);
|
||||||
ctx->current = DELETE_5;
|
ctx->current = DELETE_5;
|
||||||
break;
|
break;
|
||||||
|
case DELETE_7:
|
||||||
|
assert_priority(PRIO_LOW);
|
||||||
|
ctx->current = DELETE_8;
|
||||||
|
wake_up_main(ctx);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
rtems_test_assert(0);
|
rtems_test_assert(0);
|
||||||
break;
|
break;
|
||||||
@@ -269,6 +284,11 @@ static void worker_task(rtems_task_argument arg)
|
|||||||
ctx->current = DELETE_4;
|
ctx->current = DELETE_4;
|
||||||
_Thread_Enable_dispatch();
|
_Thread_Enable_dispatch();
|
||||||
break;
|
break;
|
||||||
|
case DELETE_SELF:
|
||||||
|
ctx->current = DELETE_7;
|
||||||
|
rtems_task_delete(RTEMS_SELF);
|
||||||
|
rtems_test_assert(0);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
rtems_test_assert(0);
|
rtems_test_assert(0);
|
||||||
break;
|
break;
|
||||||
@@ -370,7 +390,14 @@ static void test(void)
|
|||||||
|
|
||||||
rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
|
rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
|
||||||
|
|
||||||
rtems_test_assert(ctx->current == DELETE_6);
|
create_and_start_worker(ctx);
|
||||||
|
|
||||||
|
change_state(ctx, DELETE_6, DELETE_SELF, INVALID);
|
||||||
|
set_priority(PRIO_VERY_LOW);
|
||||||
|
|
||||||
|
rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
|
||||||
|
|
||||||
|
rtems_test_assert(ctx->current == DELETE_9);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Init(rtems_task_argument arg)
|
static void Init(rtems_task_argument arg)
|
||||||
@@ -397,6 +424,8 @@ static void Init(rtems_task_argument arg)
|
|||||||
}, \
|
}, \
|
||||||
RTEMS_TEST_INITIAL_EXTENSION
|
RTEMS_TEST_INITIAL_EXTENSION
|
||||||
|
|
||||||
|
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
|
||||||
|
|
||||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||||
|
|
||||||
#define CONFIGURE_INIT
|
#define CONFIGURE_INIT
|
||||||
|
|||||||
Reference in New Issue
Block a user