summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-17 07:36:27 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-17 09:02:17 +0200
commitadc819ef7663d01b187998a22794e66f97ef014e (patch)
tree00eb891e3b00afbf12b37ed0c229ca3866de33f7 /testsuites/sptests
parentposix: Fix return status of pthread_cancel() (diff)
downloadrtems-adc819ef7663d01b187998a22794e66f97ef014e.tar.bz2
sptests/spthreadlife01: Add self delete test case
Diffstat (limited to 'testsuites/sptests')
-rw-r--r--testsuites/sptests/spthreadlife01/init.c41
1 files changed, 35 insertions, 6 deletions
diff --git a/testsuites/sptests/spthreadlife01/init.c b/testsuites/sptests/spthreadlife01/init.c
index db22859768..6bf2d7f372 100644
--- a/testsuites/sptests/spthreadlife01/init.c
+++ b/testsuites/sptests/spthreadlife01/init.c
@@ -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
@@ -27,6 +27,7 @@
#define PRIO_HIGH 2
#define PRIO_MID 3
#define PRIO_LOW 4
+#define PRIO_VERY_LOW 5
const char rtems_test_name[] = "SPTHREADLIFE 1";
@@ -56,6 +57,10 @@ typedef enum {
DELETE_4,
DELETE_5,
DELETE_6,
+ DELETE_SELF,
+ DELETE_7,
+ DELETE_8,
+ DELETE_9,
INVALID
} test_state;
@@ -167,15 +172,19 @@ static void delete_extension(
rtems_test_assert(executing != deleted);
rtems_test_assert(ctx->main_task_id == rtems_task_self());
- assert_priority(PRIO_INIT);
-
switch (ctx->current) {
case DELETE_2:
+ assert_priority(PRIO_INIT);
ctx->current = DELETE_3;
break;
case DELETE_5:
+ assert_priority(PRIO_INIT);
ctx->current = DELETE_6;
break;
+ case DELETE_8:
+ assert_priority(PRIO_VERY_LOW);
+ ctx->current = DELETE_9;
+ break;
default:
rtems_test_assert(0);
break;
@@ -189,20 +198,26 @@ static void terminate_extension(Thread_Control *executing)
rtems_test_assert(ctx->worker_task_id == rtems_task_self());
- assert_priority(PRIO_INIT);
-
switch (ctx->current) {
case DELETE_0:
+ assert_priority(PRIO_INIT);
ctx->current = DELETE_1;
sc = rtems_task_delete(RTEMS_SELF);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
break;
case DELETE_1:
+ assert_priority(PRIO_INIT);
ctx->current = DELETE_2;
break;
case DELETE_4:
+ assert_priority(PRIO_INIT);
ctx->current = DELETE_5;
break;
+ case DELETE_7:
+ assert_priority(PRIO_LOW);
+ ctx->current = DELETE_8;
+ wake_up_main(ctx);
+ break;
default:
rtems_test_assert(0);
break;
@@ -269,6 +284,11 @@ static void worker_task(rtems_task_argument arg)
ctx->current = DELETE_4;
_Thread_Enable_dispatch();
break;
+ case DELETE_SELF:
+ ctx->current = DELETE_7;
+ rtems_task_delete(RTEMS_SELF);
+ rtems_test_assert(0);
+ break;
default:
rtems_test_assert(0);
break;
@@ -370,7 +390,14 @@ static void test(void)
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)
@@ -397,6 +424,8 @@ static void Init(rtems_task_argument arg)
}, \
RTEMS_TEST_INITIAL_EXTENSION
+#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
+
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT