summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-23 11:49:22 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-24 10:28:02 +0200
commit51e008dda169dcfed0cfb2d64328811107974845 (patch)
treefa60f514ffe3a8a7c104d2a904a15ea07cc03430
parentb364d386c9190b16c9064ab3e672c71c994fb6e8 (diff)
downloadrtems-51e008dda169dcfed0cfb2d64328811107974845.tar.bz2
posix: Fix pthread_create()
Do not access data of the executing thread without proper locks.
-rw-r--r--cpukit/posix/src/pthreadcreate.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/cpukit/posix/src/pthreadcreate.c b/cpukit/posix/src/pthreadcreate.c
index 54b6a71040..411882d532 100644
--- a/cpukit/posix/src/pthreadcreate.c
+++ b/cpukit/posix/src/pthreadcreate.c
@@ -27,6 +27,7 @@
#include <rtems/posix/priorityimpl.h>
#include <rtems/posix/pthreadimpl.h>
+#include <rtems/score/assert.h>
#include <rtems/score/cpusetimpl.h>
#include <rtems/score/threadimpl.h>
#include <rtems/score/apimutex.h>
@@ -103,7 +104,6 @@ int pthread_create(
#endif
executing = _Thread_Get_executing();
- scheduler = _Scheduler_Get_own( executing );
/*
* P1003.1c/Draft 10, p. 121.
@@ -115,9 +115,12 @@ int pthread_create(
*/
switch ( the_attr->inheritsched ) {
case PTHREAD_INHERIT_SCHED:
- api = executing->API_Extensions[ THREAD_API_POSIX ];
- schedpolicy = api->Attributes.schedpolicy;
- schedparam = api->Attributes.schedparam;
+ error = pthread_getschedparam(
+ pthread_self(),
+ &schedpolicy,
+ &schedparam
+ );
+ _Assert( error == 0 );
break;
case PTHREAD_EXPLICIT_SCHED: