summaryrefslogtreecommitdiffstats
path: root/cpukit/posix
diff options
context:
space:
mode:
authorJennifer Averett <jennifer.averett@oarcorp.com>2014-01-14 09:43:14 -0600
committerJennifer Averett <jennifer.averett@oarcorp.com>2014-03-07 09:12:41 -0600
commit6e5f2493a97e4d441ade2eccc1f5c474e71c01f3 (patch)
tree813cbf83982270348f2e93d77f2fcb2f5c51b844 /cpukit/posix
parentposix: Add dynamic pthread get and set affinity. (diff)
downloadrtems-6e5f2493a97e4d441ade2eccc1f5c474e71c01f3.tar.bz2
posix: Add pthread_getattr_np().
This is a useful POSIX thread API helper which is found in `GNU/Linux and *BSD.
Diffstat (limited to 'cpukit/posix')
-rw-r--r--cpukit/posix/Makefile.am1
-rw-r--r--cpukit/posix/src/pthreadgetattrnp.c57
2 files changed, 58 insertions, 0 deletions
diff --git a/cpukit/posix/Makefile.am b/cpukit/posix/Makefile.am
index 9dc8820507..ccadd63630 100644
--- a/cpukit/posix/Makefile.am
+++ b/cpukit/posix/Makefile.am
@@ -130,6 +130,7 @@ libposix_a_SOURCES += src/pthreadatfork.c src/pthreadattrdestroy.c \
src/pthreadattrsetschedparam.c src/pthreadattrsetschedpolicy.c \
src/pthreadattrsetscope.c src/pthreadattrsetstackaddr.c \
src/pthreadattrsetstack.c src/pthreadattrsetstacksize.c \
+ src/pthreadgetattrnp.c \
src/pthreadattrgetguardsize.c src/pthread.c \
src/pthreadcreate.c src/pthreaddetach.c src/pthreadequal.c \
src/pthreadexit.c src/pthreadgetcpuclockid.c \
diff --git a/cpukit/posix/src/pthreadgetattrnp.c b/cpukit/posix/src/pthreadgetattrnp.c
new file mode 100644
index 0000000000..f71819f998
--- /dev/null
+++ b/cpukit/posix/src/pthreadgetattrnp.c
@@ -0,0 +1,57 @@
+/**
+ * @file
+ *
+ * @brief Pthread Get Attribute
+ * @ingroup POSIXAPI
+ */
+
+/*
+ * COPYRIGHT (c) 2014.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define _GNU_SOURCE
+#include <pthread.h>
+#include <errno.h>
+
+#include <rtems/posix/pthreadimpl.h>
+#include <rtems/score/threadimpl.h>
+
+int pthread_getattr_np(
+ pthread_t id,
+ pthread_attr_t *attr
+)
+{
+ Objects_Locations location;
+ POSIX_API_Control *api;
+ Thread_Control *the_thread;
+
+ if ( !attr )
+ return EINVAL;
+
+ the_thread = _Thread_Get( id, &location );
+ switch ( location ) {
+
+ case OBJECTS_LOCAL:
+ api = the_thread->API_Extensions[ THREAD_API_POSIX ];
+ _POSIX_Threads_Copy_attributes( attr, &api->Attributes);
+ _Objects_Put( &the_thread->Object );
+ return 0;
+
+#if defined(RTEMS_MULTIPROCESSING)
+ case OBJECTS_REMOTE:
+#endif
+ case OBJECTS_ERROR:
+ break;
+ }
+
+ return ESRCH;
+}