summaryrefslogtreecommitdiffstats
path: root/cpukit/score
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2014-03-04 15:54:12 -0600
committerJoel Sherrill <joel.sherrill@oarcorp.com>2014-03-07 13:21:11 -0600
commite6c87f78724743bc74a38678f93ed579ace840f2 (patch)
treedce3962edb00574dade0c8caf837cd85b9607831 /cpukit/score
parentRemove trailing whitespace in previous patches (diff)
downloadrtems-e6c87f78724743bc74a38678f93ed579ace840f2.tar.bz2
POSIX keys now enabled in all configurations.
Formerly POSIX keys were only enabled when POSIX threads were enabled. Because they are a truly safe alternative to per-task variables in an SMP system, they are being enabled in all configurations.
Diffstat (limited to 'cpukit/score')
-rw-r--r--cpukit/score/include/rtems/score/thread.h13
-rw-r--r--cpukit/score/src/threadinitialize.c6
2 files changed, 18 insertions, 1 deletions
diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
index ed12ad272a..527be58110 100644
--- a/cpukit/score/include/rtems/score/thread.h
+++ b/cpukit/score/include/rtems/score/thread.h
@@ -8,7 +8,7 @@
*/
/*
- * COPYRIGHT (c) 1989-2009.
+ * COPYRIGHT (c) 1989-2014.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
@@ -471,8 +471,19 @@ struct Thread_Control_struct {
void *API_Extensions[ THREAD_API_LAST + 1 ];
/** This field points to the user extension pointers. */
void **extensions;
+
/** This field points to the set of per task variables. */
rtems_task_variable_t *task_variables;
+
+ /**
+ * This is the thread key value chain's control, which is used
+ * to track all key value for specific thread, and when thread
+ * exits, we can remove all key value for specific thread by
+ * iterating this chain, or we have to search a whole rbtree,
+ * which is inefficient.
+ */
+ Chain_Control Key_Chain;
+
};
#if (CPU_PROVIDES_IDLE_THREAD_BODY == FALSE)
diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c
index acd6636ac8..808c425d33 100644
--- a/cpukit/score/src/threadinitialize.c
+++ b/cpukit/score/src/threadinitialize.c
@@ -2,6 +2,7 @@
* @file
*
* @brief Initialize Thread
+ *
* @ingroup ScoreThread
*/
/*
@@ -233,6 +234,11 @@ bool _Thread_Initialize(
#endif
/*
+ * initialize thread's key vaule node chain
+ */
+ _Chain_Initialize_empty( &the_thread->Key_Chain );
+
+ /*
* Open the object
*/
_Objects_Open( information, &the_thread->Object, name );