[rtems commit] sptests/spthreadlife01: Add self delete test case

Sebastian Huber sebh at rtems.org
Tue May 17 07:02:39 UTC 2016


Module:    rtems
Branch:    master
Commit:    adc819ef7663d01b187998a22794e66f97ef014e
Changeset: http://git.rtems.org/rtems/commit/?id=adc819ef7663d01b187998a22794e66f97ef014e

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue May 17 07:36:27 2016 +0200

sptests/spthreadlife01: Add self delete test case

---

 testsuites/sptests/spthreadlife01/init.c | 41 +++++++++++++++++++++++++++-----
 1 file changed, 35 insertions(+), 6 deletions(-)

diff --git a/testsuites/sptests/spthreadlife01/init.c b/testsuites/sptests/spthreadlife01/init.c
index db22859..6bf2d7f 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




More information about the vc mailing list