summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/spsysinit01/init.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-02-14 19:09:56 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-02-25 07:18:26 +0100
commitba74ebde7461b28bf0261523d4e91e7c0e17b622 (patch)
tree0929ec50a724db8418a8d1f1b6a5d8d4c847f1dd /testsuites/sptests/spsysinit01/init.c
parentconfig: Add _SMP_Is_enabled (diff)
downloadrtems-ba74ebde7461b28bf0261523d4e91e7c0e17b622.tar.bz2
libio: Add POSIX user environment pointer to TCB
The IO library used a POSIX key to store an optional POSIX user environment pointer. This pulled in the POSIX keys support in every application configuration. Add a user environment pointer to the thread control block (TCB) instead. Applications which do not need the POSIX user environment will just get an overhead of one pointer per thread. Close #3882.
Diffstat (limited to '')
-rw-r--r--testsuites/sptests/spsysinit01/init.c41
1 files changed, 40 insertions, 1 deletions
diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c
index 224eac468f..407ff26624 100644
--- a/testsuites/sptests/spsysinit01/init.c
+++ b/testsuites/sptests/spsysinit01/init.c
@@ -125,6 +125,8 @@ typedef enum {
IDLE_THREADS_POST,
LIBIO_PRE,
LIBIO_POST,
+ USER_ENVIRONMENT_PRE,
+ USER_ENVIRONMENT_POST,
ROOT_FILESYSTEM_PRE,
ROOT_FILESYSTEM_POST,
BSP_PRE_DRIVERS_PRE,
@@ -513,7 +515,7 @@ FIRST(RTEMS_SYSINIT_POSIX_KEYS)
LAST(RTEMS_SYSINIT_POSIX_KEYS)
{
- assert(info_is_init(&_POSIX_Keys_Information, 2));
+ assert(info_is_init(&_POSIX_Keys_Information, 1));
next_step(POSIX_KEYS_POST);
}
@@ -541,6 +543,24 @@ LAST(RTEMS_SYSINIT_LIBIO)
next_step(LIBIO_POST);
}
+static size_t user_extensions_pre_user_env;
+
+FIRST(RTEMS_SYSINIT_USER_ENVIRONMENT)
+{
+ user_extensions_pre_user_env =
+ _Chain_Node_count_unprotected(&_User_extensions_List.Active);
+ next_step(USER_ENVIRONMENT_PRE);
+}
+
+LAST(RTEMS_SYSINIT_USER_ENVIRONMENT)
+{
+ assert(
+ user_extensions_pre_user_env + 1 ==
+ _Chain_Node_count_unprotected(&_User_extensions_List.Active)
+ );
+ next_step(USER_ENVIRONMENT_POST);
+}
+
FIRST(RTEMS_SYSINIT_ROOT_FILESYSTEM)
{
struct stat st;
@@ -842,6 +862,18 @@ static void do_cleanup_push_pop(void)
pthread_cleanup_pop(0);
}
+static void do_posix_key_create(void)
+{
+ pthread_key_t key;
+ int eno;
+
+ eno = pthread_key_create(&key, NULL);
+ rtems_test_assert(eno == 0);
+
+ eno = pthread_key_delete(key);
+ rtems_test_assert(eno == 0);
+}
+
static void do_posix_mq_open(void)
{
struct mq_attr attr;
@@ -925,6 +957,11 @@ static void check_config(void)
rtems_test_assert(config->User_initialization_tasks_table != NULL);
}
+static void do_use_global_user_env(void)
+{
+ rtems_libio_use_global_env();
+}
+
static void Init(rtems_task_argument arg)
{
next_step(INIT_TASK);
@@ -939,10 +976,12 @@ static void Init(rtems_task_argument arg)
do_task_create();
do_timer_create();
do_cleanup_push_pop();
+ do_posix_key_create();
do_posix_mq_open();
do_posix_sem_open();
do_posix_shm_open();
do_posix_timer_create();
+ do_use_global_user_env();
check_config();
TEST_END();
exit(0);